शून्य जांच के संदर्भ में, दोनों को हमेशा एक ही परिणाम वापस करना चाहिए। यदि कोई गैर-शून्य संदर्भ कभी भी शून्य (बराबर ऑब्जेक्ट पैटर्न का उपयोग करते समय) के बराबर होता है, भले ही संदर्भ Equals या == ऑपरेटर का उपयोग किया गया हो, यह बहुत खराब चीज़ है। तो, उस परिदृश्य में मैं == /! = का उपयोग करूंगा।
मैं कहूँगा कि, अगर == ऑपरेटर अतिभारित रहे थे, ReferenceEquals का उपयोग कर हो सकता है थोड़ा तेजी से। पहली चीज एक ओवरलोडेड == करना चाहिए यह देखना है कि दो चर एक ही ऑब्जेक्ट को इंगित करते हैं, इसलिए ओवरलोडेड ऑपरेटर के मामले में आप कॉल स्टैक पर एक अतिरिक्त फ्रेम के साथ समाप्त होते हैं। ReferenceEquals का उपयोग करने से यह भी गारंटी मिलती है कि केवल जांच की गई है।
मैं आम तौर पर किसी भी अन्य परिदृश्य में == /! = का उपयोग करता हूं। पूरा विचार यह है कि ऑपरेटर "समानता" को परिभाषित करता है; यह हमेशा संदर्भित नहीं होता है (वास्तव में, अधिकांश यौगिक वस्तुओं की समानता के लिए संरचनात्मक रूप से तुलना की जानी चाहिए; वे बराबर हैं यदि उनके सदस्य बराबर हैं)।ऑब्जेक्ट, सैद्धांतिक रूप से, जानता है कि समानता, सापेक्ष आदेश इत्यादि के लिए खुद को किसी अन्य वस्तु से तुलना करना सर्वोत्तम है और तर्क के एक बहुत ही विशिष्ट और संभवतः गलत टुकड़े को हार्डकोड करने के बजाय, आपको भाषा की ऑब्जेक्ट उन्मुख प्रकृति का उपयोग करना चाहिए ऑब्जेक्ट को आपको बताएं कि यह किसी और चीज़ के बराबर है या नहीं।
ध्यान देने योग्य बात अपने दोस्त के संस्करण कम पढ़ी जा सकती है कि (जो एक मुद्दा जब चेक, परस्पर विनिमय कर रहे हो जाता है वर्थ के बराबर है जो वे आमतौर पर हैं)। – keyser
इसके अलावा - यह उपरोक्त से भी बदतर है - आपको 'if (! Object.ReferenceEquals (myObject, null)) टाइप करना होगा - इसलिए यह वास्तविकता में वर्णित से भी लंबा है। –
@ReedCopsey नहीं, आपको इसे टाइप करने की ज़रूरत नहीं है, क्योंकि आपकी विधि किसी वर्ग या संरचना के अंदर है जो स्थिर (संदर्भित 'विधि को अपनी (प्रत्यक्ष या अप्रत्यक्ष) बेस क्लास' System.Object' से प्राप्त करती है। तो उपर्युक्त के रूप में लिखना ठीक है (विरासत विधि को 'नई' पद्धति के साथ छिपाएं, लेकिन यह एक बुरा अपवाद है)। –