2015-09-23 4 views
62

मैं नेट संदर्भ स्रोत में OperatingSystem.cs फ़ाइल के माध्यम से जा रहा था और line 50 में इस कोड का उल्लेख किया कास्टिंग:नेट संदर्भ स्रोत में आपत्ति उठाने

if ((Object) version == null) 

version वर्ग Version की एक वस्तु है, जो version व्युत्पन्न का मतलब है Object से। यदि ऐसा है, तो क्या यह Object पर अनावश्यक कास्टिंग नहीं है? क्या यह वही नहीं होगा?

if (version == null) 

उत्तर

91

नहीं, यह बराबर नहीं है - क्योंकि Version भार के == ऑपरेटर। बल्कि Version में operator== कार्यान्वयन बुला से

if (Object.ReferenceEquals(version, null)) 

...:

टुकड़ा जो Object के लिए छोड़ दिया संकार्य डाले के बराबर है। यह किसी भी तरह की पहली कार्रवाई के रूप में एक शून्यता जांच करने की संभावना है, लेकिन यह अतिरिक्त स्तर को छोड़ देता है।

अन्य मामलों में, यह एक बहुत ही महत्वपूर्ण अंतर बना सकता है। उदाहरण के लिए:

string original = "foo"; 
string other = new string(original.ToCharArray()); 
Console.WriteLine(original == other); // True 
Console.WriteLine((object) original == other); // False 
+2

@afaolek: स्रोत के माध्यम से जाने की कोई आवश्यकता नहीं है - केवल दस्तावेज़ीकरण को देखें और आप समानता ऑपरेटर देखेंगे। –

+0

आपके उत्तर में नमूना का उपयोग करके, 'Console.WriteLine ((ऑब्जेक्ट) मूल == (ऑब्जेक्ट) अन्य का परिणाम क्या होगा); '? – afaolek

+1

@afaolek: फिर से झूठा - यह कुछ भी नहीं बदलेगा, क्योंकि यह मूल रूप से संदर्भ तुलना का उपयोग करेगा। –

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