2011-05-31 13 views
31
int n == 0; 

if (n == null)  
{ 
    Console.WriteLine("......"); 
} 

यह सच है कि अभिव्यक्ति (n == 0) का परिणाम हमेशा झूठ है क्योंकि प्रकार int का एक मान प्रकार int?टाइप क्यों "int" कभी 'शून्य' के बराबर नहीं है?

+7

क्योंकि int एक मान प्रकार है ...? – BoltClock

+2

क्यों सी # के बारे में एक प्रश्न डुप्लिकेट किया जा सकता है यदि मौजूदा उत्तर जावा के लिए है ?! –

+1

@ मटियास: मुझे लगता है कि यह समझ में आता है क्योंकि .NET और Java में कई समानताएं हैं, और इस मामले में यह एक ही अवधारणा है जिसमें थोड़ा अलग शब्दावली (आदिम बनाम मूल्य प्रकार) है। और जब आप बंद करने के लिए वोट देते हैं, तो आप 5 में से 1 कारण चुनते हैं, और सभी वोटों का एक ही कारण नहीं होना चाहिए। –

उत्तर

57

की null के लिए कभी नहीं के बराबर होती है जब आप अपने पूर्णांक चर शून्य मान अनुमति देना चाहते हैं, के लिए यह घोषणा है

int? n = 0; 

नोट ? पूर्णांक के बाद, जिसका अर्थ है कि प्रकार मान null हो सकता है: एक nullable type हो। NETable प्रकार .NET Framework के v2.0 के साथ पेश किए गए थे।

+0

वैकल्पिक रूप से (हालांकि मुझे यह पसंद है शॉर्टंड '? 'पोस्ट-फिक्स बेहतर) [' Nullable '] (http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx) है। - संपादित करें: इसके अतिरिक्त, अब आप या तो संदर्भित कर सकते हैं (इस उदाहरण में) 'n.Value' या शॉर्ट-हाथ 'int m = n ?? डिफ़ॉल्ट (int); '(या जो भी आपने डिफ़ॉल्ट मान चुना है) [int m = (n.HasValue? n.Value: default (int)) के लिए वाक्य रचनात्मक चीनी;'] –

+4

@ ब्रैड सत्य- मैं होगा अगर मैंने '' 'shorthand का उपयोग नहीं किया तो मेरी ज़िंदगी बर्बाद कर रही है। – RedFilter

+0

@ ब्रैड: 'n.GetValueOrDefault()' के साथ-साथ '??' – thecoop

3

क्योंकि int एक संदर्भ प्रकार के बजाय एक मूल्य प्रकार है। सी # भाषा विशिष्टता शून्य होने के लिए int की अनुमति नहीं देती है। इस कथन को संकलित करने का प्रयास करें:

int x = null ; 

और देखें कि आपको क्या मिलता है।

आपको संकलक चेतावनी मिलती है क्योंकि यह एक व्यर्थ परीक्षण है और संकलक इसे जानता है।

2

.NET (जैसे int, double, और bool) में "वैल्यू टाइप" परिभाषा के अनुसार, शून्य हो सकता है - उनके पास हमेशा एक वास्तविक मान असाइन किया जाता है। मूल्य प्रकार बनाम संदर्भ प्रकारों के लिए एक अच्छा परिचय के लिए, http://www.albahari.com/valuevsreftypes.aspx

10

सी # में एक अनियमित चर का उपयोग करने की अनुमति नहीं है।

तो

एक संकलन त्रुटि में
int i; 
Console.Writeline(i); 

परिणाम।

int anInt = new int(); 

इस पूर्णांक के लिए Default value जो 0. मामलों में आप किसी सामान्य int एक के साथ पूर्णांक नल कर सकते हैं करना चाहते हैं में है में परिणाम होगा:

आप के साथ नए तरह के रूप में पूर्णांक को प्रारंभ कर सकते हैं वाक्यविन्यास

int? nullableInt = null; 
+0

डाउनवोट क्यों? यह स्पष्ट करना महत्वपूर्ण है कि प्रारंभिकता के मामले में प्रारंभिकरण कैसे कार्य करता है। कोई अन्य जवाब यह नहीं किया। विशेष रूप से सवाल की अस्पष्टता पर विचार करना। हमें यह सुनिश्चित करने की ज़रूरत है कि सभी जमीन ओपी और भविष्य के लोगों के लिए कवर की गई है जिनके पास यह सामान्य प्रश्न है। –

+0

मैंने डाउनवॉटेड किया क्योंकि प्रारंभिकरण भी एक मुद्दा नहीं था (हालांकि, विचित्र रूप से, ओपी का प्रारंभिक संकलन नहीं होगा)। उस समय, यही वह है जो मैंने आपके उत्तर का मुद्दा माना, और मैंने इसे विषय-वस्तु के बारे में सोचा। हालांकि, मेरा वोट लॉक होने लगते हैं। –

+0

@ जेओएल बी फंता - मैंने देखा कि ओपी प्रारंभिक संकलन नहीं करेगा। यही कारण है कि मैंने सी # लैंग के संबंध में प्रारंभिकरण और नल को समझाते हुए इस उत्तर को पोस्ट करने के बारे में सोचा। –

0

एनयूएलएल का उपयोग सामान्य रूप से पॉइंटर्स और संदर्भों पर लागू होता है। एक पूर्णांक को आवंटित मान 0 शून्य नहीं है। हालांकि अगर आप पूर्णांक को पॉइंटर असाइन कर सकते हैं और इसे पूर्ण रूप से असाइन कर सकते हैं, तो कथन वैध है।

सारांश में =>

/*Use the keyword 'null' while assigning it to pointers and references. Use 0 for integers.*/ 
1

बहुत सीधे शब्दों में, किसी पूर्णांक एक बहुत ही बुनियादी मद है। यह छोटा और सरल है ताकि इसे जल्दी से संभाला जा सके। इसे ऑब्जेक्ट/पॉइंटर मॉडल के साथ सीधे मूल्य के रूप में संभाला जाता है। इस प्रकार, इसके लिए कोई कानूनी "पूर्ण" मूल्य नहीं है। इसमें बस इसमें शामिल है। 0 का मतलब है 0. एक सूचक के विपरीत, जहां यह 0 होना कुल होगा। 0 को संग्रहीत करने वाली ऑब्जेक्ट में अभी भी एक शून्य-शून्य सूचक होगा।

यदि आपको मौका मिलता है, तो कुछ पुराने स्कूल सी या असेंबली काम करने के लिए समय निकालें, यह बहुत स्पष्ट हो जाएगा।

0

नहीं, क्योंकि int एक मूल्य प्रकार है।intValueDate, double आदि जैसे प्रकार है, इसलिए null मान असाइन करने का कोई तरीका नहीं है।

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