2010-11-02 16 views
5

ओवरलोड == ऑपरेटर के लिए सबसे अच्छा अभ्यास क्या है जो शून्य संदर्भ तुलना की तुलना में उसी वर्ग के दो उदाहरणों की तुलना करता है?सी #: शून्य संदर्भों की बात करते समय == ऑपरेटर को अधिभारित करने के लिए सबसे अच्छा अभ्यास

MyObject o1 = null; 
MyObject o2 = null; 
if (o1 == o2) ... 


static bool operator == (MyClass o1, MyClass o2) 
{ 
    // ooops! this way leads toward recursion with stackoverflow as the result 
    if (o1 == null && o2 == null) 
    return true; 

    // it works! 
    if (Equals(o1, null) && Equals(o2, null)) 
    return true; 

    ... 
} 

सबसे अच्छा तरीका तुलना में अशक्त संदर्भ को संभालने के लिए क्या है?

उत्तर

11

मुझे आश्चर्य हुआ कि क्या "सर्वश्रेष्ठ दृष्टिकोण" है।

static bool operator == (MyClass o1, MyClass o2) 
{ 
    if(object.ReferenceEquals(o1, o2)) // This handles if they're both null 
     return true;     // or if it's the same object 

    if(object.ReferenceEquals(o1, null)) 
     return false; 

    if(object.ReferenceEquals(o2, null)) // Is this necessary? See Gabe's comment 
     return false; 

    return o1.Equals(o2); 

} 
+4

'object.ReferenceEquals (O2, नल))' जाँच नहीं है यहाँ कैसे मैं यह कर रहा है कड़ाई से जरूरी है। बाधाएं पहली चीज हैं 'बराबर' एक ही जांच कर रही है। – Gabe

1
if (ReferenceEquals(o1, null) && ReferenceEquals(o2, null)) 
    return true; 

आदि

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