2012-10-16 10 views
5

मुझे वास्तव में तुलना करने के लिए इसका उपयोग करने से पहले स्ट्रिंग चर के लिए एक मान असाइन करने की आवश्यकता क्यों है। पूर्व के लिए: कुछ इनपुट - नहीं कर सकते असाइन नहीं किए गए चर 'अस्थायी' का उपयोग करें - तरह कुछ - objतुलना करने से पहले स्ट्रिंग को मान निर्दिष्ट क्यों करें, जब डिफ़ॉल्ट शून्य है

 string temp; 
     if (obj== null) 
     { 
      temp = "OK"; 
     } 
     string final = temp; 

मैं संकलन समय त्रुटि मिलती है। लेकिन स्ट्रिंग वैरिएबल में डिफ़ॉल्ट मान 'शून्य' है, जिसे मैं उपयोग करना चाहता हूं। तो इसकी अनुमति क्यों नहीं है?

उत्तर

7

जब डिफ़ॉल्ट अशक्त

है डिफ़ॉल्ट रिक्त नहीं (या कुछ और) एक स्थानीय चर के लिए है। यह सिर्फ असाइन किया गया है।

आप शायद एक स्ट्रिंग फ़ील्ड (कक्षा स्तर पर एक चर) के बारे में सोच रहे हैं। यही कारण है कि null होगा:

private string temp; 

private void M() 
{ 
    if (obj== null) 
    { 
     temp = "OK"; 
    } 
    string final = temp; // default tnull 
} 

लेकिन एक विधि के अंदर, बस मूल्य के साथ प्रारंभ आप की जरूरत:

string temp = null; 

यह है:

string temp = null; 
+0

बीटीडब्ल्यू, एक त्वरित तकनीकी नोट। चूंकि सी # आईएल को संकलित करता है, और विधि-स्तर आईएल स्टैक-आधारित है, वैरिएबल तकनीकी रूप से अस्तित्व में नहीं है जब तक उन्हें असाइन नहीं किया जाता है। जबकि डीबगर आपको बता सकता है कि एक असाइन किए गए चर '0' या कुछ के बराबर है, ज्यादातर मामलों में, यह सिर्फ एक सौजन्य है। यह केवल बाद में बनाया जाएगा। – GregRos

+0

@GregRoss - और जब यह बनाया जाता है तो मेरा मानना ​​है कि यह इस मामले में 'डिफ़ॉल्ट (टी) ',' शून्य' है। लेकिन न तो सी # प्रोग्रामर के लिए देखा जा सकता है। –

+0

बिल्कुल नहीं। आईएल में, एक चर को स्पष्ट मूल्य के बिना घोषित नहीं किया जा सकता है जिसके लिए इसे असाइन किया जा सकता है। एक चर को 'डिफ़ॉल्ट (टी) '(या' शून्य ') को असाइन करने के लिए, आपको पहले एक स्पष्ट कमांड का उपयोग करके इस मान को पुनर्प्राप्त करने की आवश्यकता होगी, और केवल तभी आवंटित करें। अभ्यास में, सी # से उत्पन्न आईएल यह कभी नहीं करता है। जबकि आपको लगता है कि आपने एक चर घोषित किया है, तो आईएल आमतौर पर इसे तब तक घोषित नहीं करता जब तक कि इसे असाइन करने के लिए एक निश्चित मूल्य न हो। – GregRos

2

फिर अपने स्थानीय चर के लिए डिफ़ॉल्ट के रूप में अशक्त assing बस एक संकलक संकेत है कि आप एक मूल्य असाइन करने के लिए भूल गए हो सकता है। स्पष्ट रूप से शून्य को असाइन करके आप संकलक को बता रहे हैं कि आपने इसके बारे में सोचा है। ।

एक विधि शरीर चर कि विधि के आह्वान के लिए विशिष्ट हैं की घोषणा कर सकते हैं:

सी # भाषा विनिर्देश वी 4.0 खंड 1.6.6.2 "विधि शरीर और स्थानीय चर" निम्नलिखित में कहा गया है। इस तरह के चर को स्थानीय चर कहा जाता है। ... सी # को स्थानीय मान की आवश्यकता है निश्चित रूप से को इसके मूल्य से पहले प्राप्त किया जा सकता है।

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