0L.Equals(0) // true
यह long.Equals
विधि है, जो एक long
एक पैरामीटर के रूप में स्वीकार करता करने के लिए हल करता है। int
पर पैरामीटर के लिए प्रदान की गई वास्तविक अभिव्यक्ति। int
को long
पर स्पष्ट रूप से परिवर्तित किया गया है, इसलिए long
0
पारित किया गया है, जो अन्य मान के बराबर है।
((object)0L).Equals(0L) // true
((object)0L).Equals(0) // false
मुक्केबाजी long
यहाँ long.Equals
अधिभार के उपयोग से बचाता है, और केवल object.Equals
अधिभार, जो एक object
पैरामीटर स्वीकार करता है छोड़ देता है। चूंकि पैरामीटर object
दोनों स्निपेट्स हैं, प्रत्येक में क्रमशः long
और int
है, दोनों बॉक्सिंग प्राप्त करते हैं। object.Equals
कार्यान्वयन भी पैरामीटर के प्रकार की जांच करता है और विभिन्न प्रकार के किसी भी ऑब्जेक्ट को बराबर नहीं मानता है। इन दो स्निपेट्स में से पहला चेक पास करता है, जिस बिंदु पर यह मानों की जांच करने के लिए चला जाता है, उन्हें बराबर लगता है। दूसरा स्निपेट चेक विफल रहता है, जिसके परिणामस्वरूप false
होता है।
मुझे लगता है कि असली मुद्दा "0" बनाया जा रहा है, और आपकी कास्टिंग प्रत्येक बार विभिन्न भिन्नताओं को चुनने के लिए बना रही है। – BradleyDotNET