जब संख्याओं, तिथियों और समयों को स्ट्रिंग्स में स्वरूपित किया जाता है या स्ट्रिंग्स से पार्स किया जाता है तो यह निर्धारित करने के लिए एक संस्कृति का उपयोग किया जाता है कि यह कैसे किया जाता है। जैसे प्रमुख en-USसंस्कृति में आपके पास ये स्ट्रिंग प्रतिनिधित्व हैं:
- 1,000,000.00 - दो अंकों के अंश के साथ एक मिलियन
- 1/29/2013 - इस पोस्टिंग की तारीख
मेरी संस्कृति में ( da-DK) मानों में यह स्ट्रिंग प्रतिनिधित्व है:
- 1.000.000,00 - दो अंकों के अंश के साथ एक मिलियन
- 29-01-2013 - इस पोस्टिंग की तारीख
विंडोज ऑपरेटिंग सिस्टम में उपयोगकर्ता यह भी अनुकूलित कर सकता है कि नंबर और दिनांक / समय को कैसे स्वरूपित किया जाए और वह अपने ऑपरेटिंग सिस्टम की संस्कृति की तुलना में किसी अन्य संस्कृति को भी चुन सकता है। उपयोग किया जाने वाला स्वरूपण उपयोगकर्ता का विकल्प है कि यह कैसा होना चाहिए।
इसलिए जब आप उदाहरण के लिए ToStringया String.Formatस्ट्रिंग का उपयोग करके DateTime.Parseया Decimal.Parseडिफ़ॉल्ट रूप से उपयोग करने के लिए उपयोगकर्ता के लिए प्रदर्शित होने के लिए एक मान को प्रारूपित करते हैं तो इसका उपयोग करना है CultureInfo.CurrentCulture। यह उपयोगकर्ता को स्वरूपण को नियंत्रित करने की अनुमति देता है।
हालाँकि, बहुत सारे स्ट्रिंग स्वरूपण और पार्सिंग वास्तव में अनुप्रयोग और उपयोगकर्ता के बीच लेकिन एप्लिकेशन और कुछ डेटा प्रारूप (जैसे XML या CSV फ़ाइल) के बीच बदले गए तार नहीं हैं। उस स्थिति में आप उपयोग नहीं करना चाहते हैं CultureInfo.CurrentCultureक्योंकि यदि विभिन्न संस्कृतियों के साथ स्वरूपण और पार्सिंग किया जाता है तो यह टूट सकता है। उस स्थिति में आप उपयोग करना चाहते हैं CultureInfo.InvariantCulture(जो कि en-USसंस्कृति पर आधारित है)। यह सुनिश्चित करता है कि मान समस्याओं के बिना गोल कर सकते हैं।
कारण यह है कि ReSharper आप चेतावनी देता है कि कुछ आवेदन लेखकों इस तरह के अंतर जो अनपेक्षित परिणामों को जन्म दे सकती से अनजान हैं, लेकिन वे इस खोज में कभी नहीं है क्योंकि उनके है CultureInfo.CurrentCultureहै en-USजो के रूप में ही व्यवहार है CultureInfo.InvariantCulture। हालाँकि, जैसे ही एप्लिकेशन का उपयोग किसी अन्य संस्कृति में किया जाता है, जहाँ प्रारूपण के लिए एक संस्कृति का उपयोग करने का अवसर होता है और दूसरे के लिए एप्लिकेशन को पार्स करने का अवसर टूट सकता है।
तो इसे योग करने के लिए:
CultureInfo.CurrentCultureयदि आप किसी उपयोगकर्ता स्ट्रिंग को प्रारूपित या पार्स कर रहे हैं तो (डिफ़ॉल्ट) का उपयोग करें ।
- उपयोग करें
CultureInfo.InvariantCultureयदि आप एक स्ट्रिंग को स्वरूपित या पार्स कर रहे हैं जो सॉफ्टवेयर के एक टुकड़े से पार्स करने योग्य होना चाहिए।
- शायद ही कभी एक विशिष्ट राष्ट्रीय संस्कृति का उपयोग किया जाता है क्योंकि उपयोगकर्ता यह नियंत्रित करने में असमर्थ है कि प्रारूपण और पार्सिंग कैसे किया जाता है।