2011-11-18 12 views
6

== के साथ स्ट्रिंग की तुलना करना एक अच्छा अभ्यास है? वहाँ string पर Compare और Equals तरीकों के संदर्भ में s1 == s2 के लिए एक बराबर है। यदि कोई उन विधियों का उपयोग करता है, CultureInfo निर्दिष्ट किए बिना FxCop चेतावनी देगा, क्या यह वास्तविक समस्या है?क्या सी # स्ट्रिंग की तुलना '==' से तुलना करना अच्छा अभ्यास है?

+0

आप किस तरह की तुलना करना चाहते हैं? –

+1

आप जो तुलना कर रहे हैं उस पर निर्भर करता है - msdn इस http://msdn.microsoft.com/en-us/library/cc165449 के लिए बिल्कुल सही है।एएसपीएक्स – JonH

+1

इस पृष्ठ में एक अच्छा स्पष्टीकरण है: http://www.dotnetperls.com/string-equals – keyboardP

उत्तर

14

== ऑपरेटर एक क्रमसूचक है, संस्कृति अनजान स्ट्रिंग की तुलना करें। यह .Equals के समान आंतरिक कॉल का उपयोग कर रहा है, और "सामान्य" स्ट्रिंग की तुलना सामग्री के लिए ठीक है।

आप संस्कृति वाकिफ comparings (जैसे। जीयूआई प्रयोजनों के लिए), की तरह जर्मन डबल या ß की जरूरत है,

CultureInfo ci = new CultureInfo("de-DE"); 
String.Compare("Strasse", "Straße", true, ci) 
1

हां, यह अभ्यास ठीक है। आप String.Compare का भी उपयोग कर सकते हैं, और Best Pratices for Using Strings in the .NET Framework में तुलना की गई सर्वोत्तम अभ्यासों की तुलना करें।

हाँ, FxCop, चेतावनी दे देंगे, लेकिन चेतावनी चेतावनी है। यदि आपको संस्कृति की परवाह नहीं है तो उन्हें अनदेखा करना सुरक्षित है। लेकिन, वास्तविक जीवन चेतावनियों की तरह, यह कभी-कभी उन्हें ध्यान देने का भुगतान करता है।

2

का उपयोग करते हैं आप तार की तुलना, आप तरीकों कि स्पष्ट रूप से निर्दिष्ट किस तरह इस्तेमाल करना चाहिए तुलना करने के लिए आप प्रदर्शन करना चाहते हैं। यह आपके कोड को अधिक रखरखाव और पठनीय बनाता है। जब भी संभव हो, सिस्टम के तरीकों के अधिभार का उपयोग करें। स्ट्रिंग और सिस्टम। उन कक्षाओं को निकालें जो स्ट्रिंगकोम्परिसन गणना पैरामीटर लेते हैं, ताकि आप निर्दिष्ट कर सकें कि किस प्रकार की तुलना निष्पादित करने के लिए है। जब आप तारों की तुलना करते हैं तो == और! = ऑपरेटरों का उपयोग करना टालना सर्वोत्तम होता है। साथ ही, String.Compare का उपयोग करने से बचें उदाहरण के तरीकों के लिए क्योंकि ओवरलोड में से कोई भी स्ट्रिंग कॉम्परिसन नहीं लेता है। इस उत्तर के लिए

bool result = root.Equals(root2, StringComparison.Ordinal); 
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase); 
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal); 

स्रोत::

अपनी आवश्यकताओं पर निर्भर करता है, तो आप अगले तरीकों की पर उपयोग कर सकते हैं http://msdn.microsoft.com/en-us/library/cc165449.aspx

2

वहाँ MSDN पर extensivedocumentation कि के बारे में क्रमसूचक और संस्कृति में बात करती है संवेदनशील स्ट्रिंग तुलना। साधारण तुलना भाषा विज्ञान के बारे में परवाह नहीं करते हैं और, डिफ़ॉल्ट रूप से, मामले से संबंधित होंगे। संस्कृति-संवेदनशील तुलना भाषा विज्ञान (मामलों, पतन, आदि) के बारे में परवाह करते हैं।

यह article डॉटनेटपरल्स पर प्रदर्शन प्रभाव में खोदता है और स्ट्रिंग तुलना (== और equals) के दो तरीकों के लिए आईएल और बेंचमार्क भी दिखाता है।

और अंत में, इस question पता चलता है कि == सख्ती से एक क्रमसूचक स्ट्रिंग तुलना और स्थानीय स्ट्रिंग्स के लिए उपयुक्त नहीं है।

1

एक स्ट्रिंग शून्य या खाली हो सकता है (उर्फ "") आप string.IsNullOrEmpty उपयोग करना चाहते हैं (...);

अन्यथा मेरी किताब या सबसे सामान में अपनी ठीक। आप क्या कर रहे हैं पर निर्भर करता है।

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