2011-07-28 14 views
54

एक बूलियन (bool) शून्य नहीं हो सकता है। और:सी # में डिफ़ॉल्ट बूलियन मान क्या है?

bool foo; if(foo){} // Use of unassigned local variable 'foo' 

डिफ़ॉल्ट मान गलत क्यों नहीं है? तो मूल्य क्या है यदि यह शून्य नहीं है? कारण क्या है?

संपादित करें 1 - डिफ़ॉल्ट मान वास्तव में गलत है - लेकिन सभी चर प्रारंभिक होना चाहिए, क्यों? यह एक और प्रश्न के लिए है;)

2 संपादित करें - Resharper के साथ: private bool foo = false; // Initializing field by default value is redundant ???

+1

आप http://blogs.msdn.com/b/ericlippert/archive/2009/10/12/absence-of-evidence-is-not-evidence-of-absence.aspx मिल सकती है दिलचस्प – AakashM

उत्तर

59

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

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

साथ

bool foo = new bool(); 

foo डिफ़ॉल्ट मान होगा।

बूलियन डिफ़ॉल्ट झूठी

+0

ठीक । आप संकलन त्रुटि की व्याख्या कैसे कर सकते हैं? – JohnJohnGa

+1

क्षमा करें, जोड़ा गया: याद रखें कि सी # में अनियमित चर का उपयोग करने की अनुमति नहीं है। जैसा कि लिंक किए गए आलेख में देखा गया है – Destructor

+1

धन्यवाद! और इसलिए आप मेरे "संपादन 2" को कैसे समझा सकते हैं :) – JohnJohnGa

4

bool के लिए डिफ़ॉल्ट मान false है। डिफ़ॉल्ट मानों पर एक महान संदर्भ के लिए this table देखें। जब आप इसे चेक करते हैं तो यह गलत नहीं होगा, अगर आप इसे प्रारंभ/सही पर सेट करते हैं।

9

डिफ़ॉल्ट मान वास्तव में गलत है।

हालांकि आप स्थानीय चर का उपयोग नहीं कर सकते हैं, इसे पहले असाइन नहीं किया गया है।

आप सत्यापित करने के लिए डिफ़ॉल्ट कीवर्ड का उपयोग कर सकते हैं:

bool foo = default(bool); 
if (!foo) { Console.WriteLine("Default is false"); } 
0

इस (का उपयोग कर डिफ़ॉल्ट कीवर्ड) की कोशिश करो

bool foo = default(bool); if (foo) { } 
0

यह संकलक से रक्षात्मक प्रोग्रामिंग दृष्टिकोण के रूप में इलाज किया जा सकता - चर होना चाहिए इसे इस्तेमाल करने से पहले सौंपा गया।

17

मूल रूप से स्थानीय चर स्वचालित रूप से प्रारंभ नहीं होते हैं। इसलिए प्रारंभ किए बिना उनका उपयोग करना अपवाद होगा।

केवल निम्न चर स्वचालित रूप से उनके डिफ़ॉल्ट मानों के प्रारंभ कर रहे हैं:

  • स्थैतिक चर वर्ग के
  • उदाहरण चर और struct उदाहरणों
  • सरणी तत्वों

मूलभूत मूल्यों के रूप में कर रहे हैं निम्न (कक्षा के डिफ़ॉल्ट कन्स्ट्रक्टर में असाइन किया गया):

  • संदर्भ प्रकार के चर का डिफ़ॉल्ट मान शून्य है।
  • पूर्णांक प्रकार के लिए, डिफ़ॉल्ट मान 0
  • चार के लिए है, तो डिफ़ॉल्ट मान `\ u0000 '
  • नाव के लिए, डिफ़ॉल्ट मान 0.0f
  • डबल के लिए है, तो डिफ़ॉल्ट मान 0.0d है
  • दशमलव के लिए, डिफ़ॉल्ट मान 0.0m
  • bool के लिए है, डिफ़ॉल्ट मान असत्य
  • एक enum प्रकार के लिए है, डिफ़ॉल्ट मान 0
  • एक struct प्रकार के लिए है, तो डिफ़ॉल्ट मान से प्राप्त किया जाता है से उनके डिफ़ॉल्ट मानों के सभी मान प्रकार क्षेत्रों tting

जहां तक ​​आपके प्रश्न के बाद भागों conerned कर रहे हैं: एक

  • कारण है कि सभी चर जो स्वचालित रूप से डिफ़ॉल्ट मानों के लिए आरंभ नहीं कर रहे हैं प्रारंभ किया जाना चाहिए संकलक द्वारा लगाया प्रतिबंध।
  • निजी बूल foo = false; यह वास्तव में अनावश्यक है क्योंकि यह एक वर्ग का एक आवृत्ति चर है। इसलिए इसे डिफ़ॉल्ट कन्स्ट्रक्टर में गलत करने के लिए शुरू किया जाएगा। इसलिए इसे स्वयं को झूठा करने के लिए सेट करने की आवश्यकता नहीं है।
+4

पूर्णता के लिए, [एमएसडीएन पर डिफ़ॉल्ट मूल्य तालिका] (http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc.aspx) कहता है कि संरचना के लिए डिफ़ॉल्ट मान प्रकारों में "सभी संदर्भ-प्रकार फ़ील्ड को शून्य" सेटिंग भी शामिल है। –

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