2012-06-05 14 views
5

मेरे पास एक ऐसी विधि है जो किसी ऑब्जेक्ट को लौटाती है और इसमें पैरामीटर भी होता है। विधि एक और विधि कहती है जो एक और बाहर पैरामीटर के रूप में एक ही बाहर पैरामीटर लेता है।फ़ंक्शन में पैरामीटर कैसे असाइन करें?

public TypeA Method1(TypeA param1, out bool param2) 
{ 
    /... some logic here .../ 
    SubMethod(out param2); 
    /... some logic here .../ 
    return param1; 
} 
:

बाहर पैरामीटर 'param1' नियंत्रण पत्ते वर्तमान पद्धति

कोड की तरह लग रहा से पहले को सौंपा जाना चाहिए: यह वापसी कथन पर निर्माण त्रुटि देता है

param2 उप-विधि() में छेड़छाड़ की गई है, विधि 1() में नहीं। क्या मुझे कुछ और करने की जरूरत है?

+5

वह कोड त्रुटि संदेश से सहमत नहीं है। इसे 'param1' के साथ * बस * कोड में अलग करने का प्रयास करें (मुझे लगता है कि 'param2' यहां एक लाल हेरिंग है)। –

+0

हाँ, यही मुझे भी लगता है। –

+2

टाइपए और टाइपबी के बीच संबंध क्या है? –

उत्तर

3

इस मामले में, मैं एक 'डिफ़ॉल्ट' मूल्य प्रदान करेंगे। बूल, int, myFoo, आदि के बावजूद - एक डिफ़ॉल्ट मान सेट करें।

public TypeA Method1(TypeB param1, out bool param2) 
{ 
    param2 = false; // default value; 
    // or 
    param2 = default(bool); // in cases where you are not sure what the default is 

    /... some logic here .../ 
    SubMethod(out param2); 
    /... some logic here .../ 
    return param1; // UPDATE: <- this is where you are receiving the exception 
} 

लेकिन आप जब param1 स्पष्ट रूप से इस उदाहरण में गलती नहीं है यही कारण है कि अपवाद 'param1' को दर्शाता है की पहचान करने की जरूरत है (स्पष्टीकरण के लिए : TypeB : TypeA संभालने और ठीक से विवश है)।

मुझे विश्वास है कि param2SubMethod(...) में एक out पैरामीटर के रूप में पारित करने param2 आवंटित करने के लिए दायित्व को हटा। हालांकि, आपने param1 पर कुछ भी असाइन नहीं किया है। क्या यहां और भी जा रहा है जिसे समझाया नहीं गया है?

+1

मुझे लगता है कि आपने इसे सिर पर खींचा है। मुद्दा यह है कि जब वह टाइपए की आवश्यकता होती है तो वह टाइपबैक लौट रहा है। –

+1

मुझे लगता है कि शुरुआत में ही असाइन करना है जो मुझे छोड़ दिया गया है। अन्य सामान (सशर्त) पर चल रहे हैं जो सबमिशन() के लिए कोड पथ बना रहे हैं, जिन्हें नहीं लिया जाता है। – 4thSpace

+1

जैसा कि मैंने टिप्पणी करने के लिए टिप्पणी में कहा था, सावधान रहें कि 'param2 = false' असाइन न करें; जब तक कि आप स्वीकार न करें कि 'विधि 1' उस मान पर 'param2' सेट के साथ वापस आ सकता है। क्या 'सबम विधि' कभी हिट नहीं होने पर 'झूठी' स्वीकार्य मान के रूप में समझ में आता है?यदि संकलक देख सकता है कि प्रत्येक कोड पथ 'सबमिशन (आउट param2)' कॉल के माध्यम से जाता है, तो पहले 'अर्थ 2' को कुछ अर्थहीन मान पर सेट करना आवश्यक नहीं होगा। ('param2' निश्चित रूप से' सबमिशन 'रिटर्न के बाद असाइन किया गया है।) –

1

आप इसे Method1 की शुरुआत में false पर सेट कर सकते हैं।

+1

कैसे थोड़ा सा स्पष्टीकरण? –

0

मैं वापसी प्रकार के SubMethod में बाहर पैरामीटर चलती का सुझाव मई:

public TypeA Method1(TypeB param1, out bool param2) 
{ 
    /... some logic here .../ 
    param2 = SubMethod(param2); 
    /... some logic here .../ 
    return param1; 
} 
संबंधित मुद्दे