2012-04-28 12 views
7

क्या यह जानने का कोई तरीका है कि आउट पैरामीटर पहले से सेट किया गया था या नहीं। यह मैं क्या देख रहा हूँ के लिए स्यूडोकोड है:कैसे बताएं कि आउट पैरामीटर पहले से सेट किया गया था या नहीं?

public virtual string blabla(long num, out bool bval) 
    { 
     if (!bval.HasValue) 
      { 
      //Do some default logic 
      bval = defaultValue; 
      } 

     return blabla2(num, bval); 
    } 
+1

यदि आप इस विधि में कुछ आने की उम्मीद करते हैं, न केवल बाहर जाने के लिए, फिर 'आउट' के बजाय 'रेफरी' का उपयोग करें। –

+1

ऐसा लगता है कि आपको एक शून्य प्रकार की आवश्यकता है: 'ref bool? बावल' –

उत्तर

12

आप नहीं कर सकते हैं - आप चर नहीं पढ़ सकते हैं, जब तक यह निश्चित रूप से अपने विधि के भीतर आवंटित किया गया है। आपको इसे स्थानीय चर की तरह माना जाना चाहिए, घोषित किया गया है लेकिन विधि की शुरुआत में किसी भी मूल्य को असाइन नहीं किया गया है - लेकिन आप वापस लौटने से पहले एक मान असाइन करना चाहिए। (यह ठीक है इसे करने के लिए एक मूल्य सौंपा है के लिए नहीं करता है, तो एक अपवाद फेंक दिया है।)

आप एक पैरामीटर किया जाता है जो विधि के लिए जानकारी के रूप में इनपुट के साथ ही जानकारी का प्रचार, आप ref के बजाय का उपयोग करना चाहिए चाहते हैं out

अधिक जानकारी के लिए my article on parameter passing देखें।

+0

एक आउट पैरामीटर मेरे मामले में अधिक उपयुक्त है। लेकिन मैं सिर्फ यह देखने के लिए जांच कर रहा था कि कोई मूल्य निर्धारित किया गया है या नहीं। फिर भी धन्यवाद। – Omtara

+0

@ ओमटारा: यदि आपका मान असाइन किया गया है तो क्या * बिल्कुल * क्या मतलब है? क्या आपका मतलब विधि के बाहर, या अपनी विधि के भीतर है? यदि आप अपनी विधि के भीतर हैं, तो आप इसे एक अलग 'बूल' स्थानीय चर के साथ ट्रैक कर सकते हैं। यह जानना अजीब बात है कि आप कहां से अधिकांश स्थानों पर कोड में हैं। –

+0

@ ओमटारा - एक आउटपुट पैरामीटर कितना उपयुक्त है जब आप टिप्पणी में कह रहे हैं कि वर्तमान विधि कहां से एक बाहरी विधि कहां से बाहर पैरामीटर का उपयोग कर रही है? –

2

Jon's उत्कृष्ट जवाब के अलावा, अगर आप चाहते हैं मानदंड अभी भी out हो सकता है, लेकिन अगर यह अंदर कुछ जगह पर एक मूल्य सौंपा गया है देखने की जरूरत विधि, आप एक स्थानीय नल प्रकार इस प्रकार की तरह इस्तेमाल कर सकते हैं:

public virtual string blabla(long num, out bool bval) 
{ 
    bool? bvalLocal; 

    ... //I'm assuming there is some code here that may or 
     //may not assign bvalLocal? 

    // This whole if block may not be needed if the default 
    // value is the default for the type (i.e. false) as 
    // GetValueOrDefualt() will take care of that (see 
    // second to last line). 
    if (!bvalLocal.HasValue) 
    { 
     //Do some default logic 
     bvalLocal = defaultValue; 
    } 

    bval = bvalLocal.GetValueOrDefault(); 
    return blabla2(num, bval); 
} 
+0

विधि को बाहर पैरामीटर की जांच करने की आवश्यकता को किसी अन्य विधि से कहा जाता है जो समान आउट पैरामीटर का उपयोग करता है। तो एक स्थानीय नलबल चर का उपयोग काम नहीं करेगा। – Omtara

+0

@ ओमटारा - यदि आप उन विधिओं के कोड (या छद्म कोड) को पोस्ट करते हैं तो यह मदद कर सकता है –

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

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