2010-05-01 12 views
133

कौन सा बेहतर कोड होगा:स्ट्रिंग तुलना: InvariantCultureIgnoreCase बनाम OrdinalIgnoreCase?

int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase); 

या

int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase); 
+8

जो आप प्राप्त करने की कोशिश कर रहे हैं उस पर निर्भर करेगा ... –

+0

@MartinLiversage cb प्रश्न को vb.net प्रश्न के डुप्लिकेट के रूप में चिह्नित करना .. कम से कम मजाकिया। मान लें कि दोनों को साझा करना चाहिए। इस मामले में नेट टैग – Lanorkin

+0

@ लैनोरकिन: दो एनम मानों के बीच भेद VB.NET और C# में समान है और इस प्रश्न के दोनों में से कोई भी जवाब नहीं है और दूसरा VB.NET या अन्य के लिए विशिष्ट हैं। सी#। दो प्रश्न स्पष्ट रूप से डुप्लिकेट हैं और उन्हें जोड़कर मैंने इन enum मानों के बारे में प्रासंगिक जानकारी को ढूंढना आसान हो गया है। –

उत्तर

33

तुम सच में चाहते हैं केवल डॉट से मेल करें, फिर CultureInfo.Ordinal सबसे तेज़ होगा, क्योंकि कोई मामला नहीं है।

44

FxCop आम तौर पर OrdinalIgnoreCase पसंद करती हैं। लेकिन आपकी आवश्यकताओं में भिन्नता हो सकती है।

अंग्रेजी के लिए बहुत कम अंतर है। यह तब होता है जब आप उन भाषाओं में भटक जाते हैं जिनके पास अलग-अलग लिखित भाषा है, यह एक मुद्दा बन जाता है। मुझे इससे ज्यादा देने के लिए पर्याप्त अनुभव नहीं हुआ है।

OrdinalIgnoreCase

StringComparer OrdinalIgnoreCase संपत्ति व्यवहार करता है जैसे कि वे बदल रहे थे सम्मेलनों अपरिवर्तनीय संस्कृति का का उपयोग कर अपरकेस में के तार में पात्रों की तुलना, और फिर प्रदर्शन द्वारा लौटाए गए एक साधारण बाइट तुलना जो भाषा से स्वतंत्र है। यह सबसे उपयुक्त है जब प्रोग्राम किए गए तारों की तुलना करते हैं या केस-असंवेदनशील संसाधनों जैसे पथ और फ़ाइल नामों की तुलना करते समय तुलना करते हैं। http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx

InvariantCultureIgnoreCase

StringComparer InvariantCultureIgnoreCase संपत्ति द्वारा लौटाए गए एक भाषायी प्रासंगिक तरीके उस मामले पर ध्यान नहीं देता में तार तुलना, लेकिन यह किसी भी विशेष संस्कृति में प्रदर्शन के लिए उपयुक्त नहीं है। इसका प्रमुख एप्लिकेशन तरीके से तारों को ऑर्डर करना है जो संस्कृतियों में समान होंगे। http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx

अपरिवर्तनीय संस्कृति CultureInfo वस्तु InvariantCulture संपत्ति द्वारा दिया है।

InvariantCultureIgnoreCase संपत्ति वास्तव में StringComparer वर्ग से ली गई एक अनाम वर्ग का एक उदाहरण देता है।

193

न तो कोड हमेशा बेहतर होता है। वे अलग-अलग चीजें करते हैं, इसलिए वे अलग-अलग चीजों में अच्छे होते हैं।

InvariantCultureIgnoreCase अंग्रेजी के आधार पर तुलना नियमों का उपयोग करता है, लेकिन बिना किसी क्षेत्रीय विविधता के। यह एक तटस्थ तुलना के लिए अच्छा है जो अभी भी कुछ भाषाई पहलुओं को ध्यान में रखता है।

OrdinalIgnoreCase सांस्कृतिक पहलुओं के बिना चरित्र कोड की तुलना करता है। यह सटीक तुलनाओं के लिए अच्छा है, जैसे लॉगिन नाम, लेकिन é या ö जैसे असामान्य वर्णों के साथ स्ट्रिंग को सॉर्ट करने के लिए नहीं। यह भी तेज़ है क्योंकि तुलना करने से पहले आवेदन करने के लिए कोई अतिरिक्त नियम नहीं हैं।

+3

'InvariantCultureIgnoreCase' व्यवहार करता है जब वह 'ä' से मिलता है? 'OrdinalIgnoreCase' का विरोध करने के रूप में ...? –

+1

@ रॉयनामिर: इनवेरिएंट संस्कृति अंग्रेजी पर आधारित है, इसलिए यह 'ä',' à', 'å', et.c. का इलाज करेगी। 'ए' के ​​रूप में, यानी diacritics हटा दें। एक सामान्य संस्कृति का उपयोग करने से पात्रों को सभी नियमित अक्षरों के बाद अक्षरों के साथ रखा जाएगा, यानी चरित्र कोड पर कड़ाई से क्रमबद्ध किया गया है। – Guffa

+0

आपका मतलब है कि वे सभी अपरकेस ए (InvariantCultureIgnoreCase) सही होंगे? –

14

आप फ़ाइल नाम की तुलना करते समय हो रहे हैं, इसलिए मैं सिर्फ जोड़ना होगा OrdinalIgnoreCase है कि निकटतम क्या NTFS करता है (यह बिल्कुल वैसा ही नहीं है, लेकिन यह InvariantCultureIgnoreCase की तुलना में करीब है)

+2

क्या आपको एनटीएफएस के लिए संदर्भ मिला है? – Basic

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