2011-11-17 11 views
11

.NET में स्थानीय तारों की तुलना करने के लिए "==" का उपयोग न करने के कारण क्या हैं? यदि मैं इसका उपयोग करता हूं तो संस्कृतिइंफो के संबंध में तुलना निष्पादित कैसे की जाएगी?क्या मुझे .NET स्थानीयकृत स्ट्रिंग तुलना के लिए '==' का उपयोग करना चाहिए?

+0

क्या आप सी # '==' ऑपरेटर के बारे में पूछ रहे हैं? यदि ऐसा है, तो आपको सी # टैग जोड़ना चाहिए। उदाहरण के लिए – phoog

उत्तर

10

== संस्कृति-असंवेदनशील है - यह एक साधारण साधारण तुलना है। तो दो तार जो सांस्कृतिक रूप से बराबर हैं - या अन्य कैनोलिकलाइजेशन फॉर्मों के मामले में भी बराबर - == के माध्यम से बराबर हो सकते हैं। यह मूल रूप से char सरणी जैसे प्रत्येक स्ट्रिंग का इलाज करता है।

10

अधिभारित String.operator == एक संस्कृति-अनजान सामान्य तुलना करेगा – यह heavily optimized unrolled loop का उपयोग करके बाइट-बाय-बाइट तारों की तुलना करता है।
यह आप == साथ संस्कृति अवगत तार की तुलना, उदाहरण के लिए "Straße" के साथ "Strasse" अगर के रूप में String.Equals(a, b, StringComparison.Ordinal)

14

ही आंतरिक फ़ंक्शन को कॉल करने, यह गलत देता है।

यदि आपको यूआई सामान (सूचीदृश्य का छंटनी) के लिए संस्कृति-जागरूक तुलना की आवश्यकता है, तो आप संबंधित संस्कृतिइंफो के साथ स्ट्रिंग.कंपारे का उपयोग करें।

CultureInfo ci = new CultureInfo("de-DE"); 
String.Compare("Strasse", "Straße", true, ci) // Returns zero 
+3

+1। – Otiel