2015-03-09 11 views
6

https://msdn.microsoft.com/en-us/library/d5x73970.aspxसी # सामान्य प्रकार समानता ऑपरेटर

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

public static void OpTest<T>(T s, T t) where T : class 
{ 
    System.Console.WriteLine(s == t); 
} 

static void Main() 
{ 
    string s1 = "target"; 
    System.Text.StringBuilder sb = new System.Text.StringBuilder("target"); 
    string s2 = sb.ToString(); 
    OpTest<string>(s1, s2); 
} 

सब कुछ ठीक है जब तक मैं स्मृति भी में विभिन्न वस्तुओं निम्नलिखित की कोशिश की, एक ही विधि

static void Main() 
{ 
    string s1 = "target"; 
    string s2 = "target"; 
    OpTest<string>(s1, s2); 
} 

यह आउटपुट 'यह सच है', एस 1 और s2 संदर्भ में वे एक ही मूल्य का अधिकार है? क्या मैं कुछ भूल रहा हूँ?

उत्तर

7

स्ट्रिंग्स .NET में प्रशिक्षु रहे हैं, ताकि वे दोनों एक ही वस्तु की ओर इशारा करते हैं जब आप

string s1 = "target"; 
string s2 = "target"; 

है। यही कारण है कि एमएसडीएन उदाहरण StringBuilder का उपयोग करता है, यह सीएलआर को एक ही मूल्य के साथ एक और स्ट्रिंग ऑब्जेक्ट बनाने में मूर्ख बनाता है ताकि जेनेरिक विधि में ऑपरेटर परीक्षण गलत हो जाए।

+1

यह सही है। इसे [एमएसडीएन यहाँ] (https://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx) पर देखा जा सकता है, "जब दो या दो से अधिक स्ट्रिंग अक्षर बराबर होते हैं स्ट्रिंग समानता ऑपरेटर (धारा 7.9.7) के अनुसार एक ही असेंबली में दिखाई देता है, ये स्ट्रिंग अक्षर एक ही स्ट्रिंग उदाहरण को संदर्भित करते हैं। " –

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