2012-06-06 10 views
6

मैंने अभी तक कड़ी मेहनत सीखी है कि IntPtr.Zero की तुलना डिफ़ॉल्ट (IntPtr) से नहीं की जा सकती है। क्या कोई मुझे बताएगा क्यों?IntPtr.Zero और डिफ़ॉल्ट (IntPtr) की तुलना करना क्यों संभव नहीं है?

IntPtr.Zero == new IntPtr(0) -> "could not evaluate expression" 
IntPtr.Zero == default(IntPtr) --> "could not evaluate expression" 
IntPtr.Zero == (IntPtr)0 -> "could not evaluate expression" 

IntPtr.Zero.Equals(IntPtr.Zero) --> "Enum value was out of legal range" exception 
IntPtr.Zero.Equals(default(IntPtr)) --> "Enum value was out of legal range" exception 

IntPtr.Zero == IntPtr.Zero --> true 
new IntPtr(0) == new IntPtr(0) --> true 
+0

वे ठीक तुलना, और वे बराबर हैं: 'वर isEqual = IntPtr.Zero == नई IntPtr (0);' और isEqual सच है। – vcsjones

+2

मेरे लिए काम करता है। आप किस मंच पर हैं और कौन सा ढांचा संस्करण? – Botz3000

+0

http://ideone.com/BJqvB 'IntPtr.Zero == डिफ़ॉल्ट (IntPtr)' आउटपुट सत्य है। यह किस संदर्भ में है? –

उत्तर

2

वीएस 2010, वीएस 2008, वीएस 2005 एसपी 1, मोनो 1.2.6 में संकलित कोड में मेरे लिए काम करता है। में दोनों समस्याओं को दोबारा उत्पन्न करने के लिए प्रबंधित किया गया केवल विजुअल स्टूडियो 2005 की घड़ी विंडो (मैंने वीएस 2005 एसपी 1 के साथ प्रयास किया), संकलित कोड अपेक्षित काम करता है। (दोनों समस्याओं से मेरा मतलब है समस्या 1: "अभिव्यक्ति का मूल्यांकन नहीं कर सका", समस्या 2: "एनम मूल्य कानूनी सीमा से बाहर था"।) इस प्रकार, जैसा कि कुछ टिप्पणी लेखकों ने बताया था, यह एक वीएस 2005 घड़ी खिड़की है बग जो आप पर ठोकर खाई। प्रासंगिक बग रिपोर्ट के लिंक को तुरंत ढूंढना आश्चर्यजनक रूप से कठिन है ...

अन्यथा ऐसे मामलों में मैं प्रतिबिंब से शुरू करूंगा कि आप किस प्रकार की तुलना करने की कोशिश करते हैं (कंसोल को प्रतिस्थापित करें। लेकिन आपके पास किसी भी सार्थक स्ट्रीम के साथ तक पहुंच):

Console.WriteLine("new IntPtr(0) type is: " + new IntPtr(0).GetType()); 
Console.WriteLine("IntPtr.Zero type is: " + IntPtr.Zero.GetType()); 
संबंधित मुद्दे