2010-07-09 34 views
14

हाल ही में एक पिछले प्रोजेक्ट में मैं वीबीएनईटी और सी # के बीच एक असाधारण अंतर आया।कुछ भी नहीं! = शून्य - या यह करता है?

null <= 2 

यह अभिव्यक्ति झूठी जो है मैं क्या उम्मीद करेंगे करने के लिए मूल्यांकन करता है:

निम्नलिखित सी # अभिव्यक्ति जो विचार करें। फिर इसी VB.NET अभिव्यक्ति:

Nothing <= 2 

मैं जानने के लिए कि यह अभिव्यक्ति वास्तव में सही का आकलन हैरान था

यह दो भाषाओं के बीच एक काफी मौलिक डिजाइन निर्णय की तरह लगता है और यह निश्चित रूप से पकड़ा मै बाहर।

क्या कोई मुझे बता सकता है क्यों? शून्य हैं और कुछ भी नहीं और एक ही है? यदि हां, तो वे अलग तरीके से क्यों व्यवहार करते हैं?

+4

'शून्य <= 2' सी # में एक संकलन-समय चेतावनी उत्पन्न करता है और इस ऑपरेशन से संबंधित कोई भी आईएल आउटपुट असेंबली को कभी भी उत्सर्जित नहीं किया जाता है। –

+0

LINQPAD में एक अभिव्यक्ति का प्रयास करें - कल्पना करें वास्तव में एक int है? कौन सा मूल्य शून्य होना होता है। –

+0

संबंधित प्रश्न (हालांकि बिल्कुल वही नहीं): http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net –

उत्तर

30

Nothing वीबी में किसी दिए गए प्रकार के लिए डिफ़ॉल्ट मान का मूल्यांकन करता है। (विवरण के लिए this link देखें।)

एक पूर्णांक तुलना (जो संकलक दाहिने हाथ संकार्य से समझेंगे) के लिए, Nothing इस प्रकार 0 हो जाएगा। 0 <= 2 अधिक स्पष्ट कारणों के लिए सच है :-)

+2

में तुलना में' शून्य 'की तुलना करें यह भी उल्लेखनीय है कि Is और IsNot ऑपरेटरों के साथ संयुक्त होने पर शून्य जांच के लिए कुछ भी उपयोग नहीं किया जाता है। –

+2

पूर्णता के लिए: सी # कोड के साथ कंपाइलर क्या करता है? '(ऑब्जेक्ट) null' एक पूर्णांक के साथ तुलना की अनुमति नहीं देता है, 'Int32' शून्य नहीं हो सकता है ...? –

+0

जब मैं उत्तर की तलाश में था तो आपने मुझे हराया। और आपको भी वही लिंक मिला: पी –

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