2010-03-11 16 views
147

क्या कोई Invariant Culture के उपयोग को प्रदर्शित करने के लिए एक उदाहरण दे सकता है? मुझे समझ में नहीं आता कि दस्तावेज क्या वर्णन करता है।Invariant संस्कृति क्या है?

+12

यह अंग्रेजी है, लेकिन किसी भी स्थान से जुड़ा नहीं है। –

उत्तर

103

परिवर्तनीय संस्कृति एक विशेष संस्कृति है जो उपयोगी है क्योंकि यह नहीं बदलेगी। वर्तमान संस्कृति एक उपयोगकर्ता से दूसरे में बदल सकती है, या यहां तक ​​कि एक रन से दूसरे तक भी बदल सकती है, इसलिए आप इसे रहने पर भरोसा नहीं कर सकते।

कई संस्कृतियों में हर बार एक ही संस्कृति का उपयोग करने में सक्षम होना कई उदाहरणों में बहुत महत्वपूर्ण है, उदाहरण के लिए, क्रमबद्धता: आपके पास एक संस्कृति में 1,1 मूल्य और दूसरे में 1.1 हो सकता है। यदि आप दूसरी संस्कृति में "1,1" मान पार्स करने का प्रयास करेंगे, तो पार्सिंग असफल हो जाएगी। हालांकि आप एक संख्या को एक स्ट्रिंग में बदलने के लिए इनवेरिएंट संस्कृति का उपयोग कर सकते हैं और बाद में इसे किसी भी कंप्यूटर सेट से किसी भी कंप्यूटर से वापस पार्स कर सकते हैं।

// Use some non-invariant culture. 
CultureInfo nonInvariantCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = nonInvariantCulture; 

decimal dec = 1.1m; 
string convertedToString = dec.ToString(); 

// Simulate another culture being used, 
// following code can run on another computer. 
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ","; 

decimal parsedDec; 

try 
{ 
    // This fails because value cannot be parsed. 
    parsedDec = decimal.Parse(convertedToString); 
} 
catch (FormatException) 
{ 
} 

// However you always can use Invariant culture: 
convertedToString = dec.ToString(CultureInfo.InvariantCulture); 

// This will always work because you serialized with the same culture. 
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture); 
+8

इसके लायक होने के लिए, यह 'System.Globalization' नामस्थान में है। –

+0

* यह हमेशा काम करेगा क्योंकि आपने उसी संस्कृति के साथ क्रमबद्ध किया है * << यह मुझे समझ में नहीं आया, मुझे लगता है कि मैंने कुछ गलत समझा। यदि 'CultureInfo.InvariantCulture' का उपयोग करना काम करता है क्योंकि आपने उसी संस्कृति के साथ क्रमबद्ध किया है .... तो क्या यह 'CultureInfo.CurrentCulture' का उपयोग करने जैसा नहीं है? – Alisson

+1

@ एलिसन यदि आप एंड्रयू के अंतिम दो कोड स्टेटमेंट को मूल प्रवाह में वापस डाल देते हैं, तो मुझे लगता है कि इससे अधिक समझदारी होगी। यदि आप हमेशा 'CultureInfo.InvariantCulture' का उपयोग करके क्रमबद्ध करते हैं तो आप जानते हैं कि आप हमेशा' CultureInfo.InvariantCulture' का उपयोग करके दशमलव पर वापस पा सकेंगे। यदि आप धारावाहिक करने के लिए 'CultureInfo.CurrentCulture' का उपयोग करते हैं, तो आपके उपयोगकर्ता के पास" वर्तमान "अमेरिका की वर्तमान संस्कृति हो सकती है। अगला उपयोगकर्ता जो इसे दशमलव पर वापस पार्स करने के लिए जाता है, में एक मौजूदा संस्कृति हो सकती है जो विभाजक के लिए "," का उपयोग करती है। –

96

परिभाषित व्यवहार के साथ अंग्रेजी पर आधारित एक नकली संस्कृति। लिखने के लिए बढ़िया, उदाहरण के लिए, कॉन्फ़िगरेशन फ़ाइलों में सामान ताकि उपयोगकर्ता को परिभाषित संस्कृति के बावजूद इसे पढ़ और लिखा जा सके।

असल में यह एक विशिष्ट संस्कृति है जो कृत्रिम है और नहीं बदलेगी।

+4

विशेष रूप से, आप संख्याओं के स्ट्रिंग रूपों में या अजीब केस रूपांतरणों के साथ अल्पविरामों और बिंदुओं के विभिन्न उपयोगों से नहीं पकड़े जाएंगे। –

+6

येस ... के लिए सामान्य समस्या: * अमेरिकी प्रोग्रामर जो सोचते हैं कि शब्द अंग्रेजी है;) और फिर जर्मन ग्राहक 1000 के लिए 1.000,00 लिखते हैं;) ओच। * यहां तक ​​कि उसी भाषा में, स्विट्जरलैंड और जर्मनी उदाहरण के लिए "।" और "," संख्याओं में विभिन्न तरीकों से। परिणाम -> कॉन्फ़िगरेशन फ़ाइलें कचरा हैं। वहां Invariant भाषा का उपयोग करें;) – TomTom

+16

स्टीव की टिप्पणी में जोड़ने के लिए: यह उपयोग करने की संस्कृति है जब आप वास्तव में देखभाल नहीं करते हैं कि चीजें * देखो * (आपको परवाह नहीं है कि यह अल्पविराम या अंक या जो कुछ भी उपयोग करता है, क्योंकि उपयोगकर्ता इसे कभी नहीं देखेगा) लेकिन आपको हमेशा ऐसा ही होना चाहिए (उदाहरण के लिए क्योंकि आपको जो लिखा है उसे पढ़ने में सक्षम होना चाहिए)। – itowlson

6

यह सामान है कि एक ही है संस्कृति की परवाह किए बिना के लिए प्रयोग किया जाता है

एक उदाहरण के लिए के रूप में

(कि उपयुक्त होने के लिए कुछ संस्कृति एक्स के लिए अनुवाद किया जा की जरूरत नहीं है) - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx। जब आप एक ऐप-विशिष्ट फ़ाइल लिखते हैं जिसे उपयोगकर्ता को गड़बड़ नहीं करना चाहिए, तो आपको संस्कृति पैरामीटर में आने वाली सभी विधियों के लिए InvariantCulture का उपयोग करना चाहिए।

नोट डॉक्स ऊपर लिंक प्रति कि:

हालांकि, एक आवेदन पत्र केवल प्रक्रियाओं है कि संस्कृति के मामले में स्वतंत्र परिणामों की आवश्यकता होती है, इस तरह के स्वरूपण और पार्स करने डेटा के रूप में है कि एक फाइल करने के लिए एक समान होती है के लिए अपरिवर्तनीय संस्कृति का उपयोग करना चाहिए।

+2

यह इस सिद्धांत से बात करता है कि इनवेरिएंट संस्कृति का उद्देश्य केवल मध्यवर्ती प्रारूप होना है, यानी यदि आप उपयोगकर्ता को सामान प्रदर्शित कर रहे हैं जो इनवेरिएंट संस्कृति का उत्पादन है (यानी, 'इनवेरिएंट संस्कृति' में, आप हैं कुछ गलत कर रहे हैं और इनवेरिएंट संस्कृति को समझ में नहीं आता है। – mlhDev

2

इनवेरिएंट संस्कृति संस्कृति-असंवेदनशील है; यह अंग्रेजी भाषा से जुड़ा हुआ है लेकिन किसी भी देश/क्षेत्र के साथ नहीं। आप संस्कृति-संवेदनशील स्ट्रिंग ऑपरेशंस के लिए इनवेरिएंट संस्कृति का उपयोग कर सकते हैं जो मौजूदा थ्रेड संस्कृति के सम्मेलनों से प्रभावित नहीं हैं और जो संस्कृतियों में सुसंगत हैं।

CultureInfo.InvariantCulture परिवर्तनीय संस्कृति का एक उदाहरण पुनर्प्राप्त करता है। इसका उपयोग सिस्टम में लगभग किसी भी विधि में किया जा सकता है। ग्लोबलाइजेशन नेमस्पेस जिसके लिए एक संस्कृति की आवश्यकता होती है। ऑब्जेक्ट तुलनाइंफो, डेटटाइमफॉर्मैट, और जैसे गुणों द्वारा लौटाए गए नंबरफॉर्मैट स्ट्रिंग तुलना और इनवेरिएंट संस्कृति के सम्मेलनों को स्वरूपित करता है।

संस्कृति के प्रति संवेदनशील डेटा है, जो विषय है उपयोगकर्ता अनुकूलन द्वारा या .NET फ्रेमवर्क या ऑपरेटिंग सिस्टम के अपडेट से बदलने के लिए विपरीत, अपरिवर्तनीय संस्कृति डेटा समय के साथ स्थिर और स्थापित संस्कृतियों में है और द्वारा अनुकूलित नहीं किया जा सकता उपयोगकर्ताओं। इससे इनवेरिएंट संस्कृति विशेष रूप से उन परिचालनों के लिए उपयोगी होती है जिनके लिए संस्कृति-स्वतंत्र परिणाम जैसे फॉर्मेटिंग और पार्सिंग ऑपरेशंस की आवश्यकता होती है जो प्रारूपित डेटा को जारी रखते हैं, या सॉर्टिंग और ऑर्डरिंग ऑपरेशन की आवश्यकता होती है कि डेटा को संस्कृति के बावजूद एक निश्चित क्रम में प्रदर्शित किया जाए।

InvariantCulture संपत्ति आसान है जब आप प्रदर्शित करने के लिए एक संस्कृति स्वतंत्र प्रारूप में डेटा जारी रहती है चाहते आता है।

उदाहरण के लिए, यदि आप एप्लिकेशन की वर्तमान संस्कृति से स्वतंत्र किसी विशिष्ट प्रारूप में कोई संख्या या डेटाटाइम प्रदर्शित करना चाहते हैं तो आप CultureInfo.InvariantCulture का उपयोग कर सकते हैं।

+0

-1 क्योंकि मैं निश्चित रूप से ऊपर दिए गए लोगों को पढ़ने के बिना निश्चित रूप से इस स्पष्टीकरण को समझ नहीं पाएगा। यह मेरी अस्पष्टता में बहुत अस्पष्ट है, * * संस्कृति-संवेदनशील स्ट्रिंग ऑपरेशंस जो मौजूदा थ्रेड संस्कृति के सम्मेलनों से प्रभावित नहीं हैं और जो कि संस्कृतियों में सुसंगत हैं "* हैं, और मैं अभी भी 100% निश्चित नहीं हूं उद्धरण के बाद वाक्य में लिखने के लिए आपको क्या मतलब था (* "प्रदर्शन जारी डेटा" * स्पष्ट रूप से एक टाइपो है, लेकिन मुझे क्या पता नहीं है)। –

संबंधित मुद्दे