2011-01-19 68 views
27

मान लीजिए कि मेरे पास out पैरामीटर के साथ कोई फ़ंक्शन है, हालांकि मुझे इसकी कीमत की आवश्यकता नहीं है। क्या कोई वास्तविक पैरामीटर पास करने का कोई तरीका है यदि दिया गया परिणाम वैसे भी फेंक दिया जाएगा?क्या पैरामीटर को छोड़ने का कोई तरीका है?

संपादित करें:

हालांकि सवाल अगर आप विधि निर्माता के नजरिए से देखने के Optional Output Parameters का शिकार यह केवल है होना करने के लिए चुना गया है। यदि आप विधि के उपयोगकर्ता हैं, तो आप पैरामीटर को वैकल्पिक बनाने में रुचि नहीं रखते हैं, बस वैरिएबल घोषित किए बिना इसका उपयोग नहीं कर रहे हैं। और यह संभव नहीं है, C# 7.0 के साथ इसे विधि कॉल में घोषित करना संभव है। तो बजाय:

int unusedValue; 
TryGetValue("key", out unusedValue); 

आपको मिलेगा:

TryGetValue("key", out int unusedValue); 

या यहाँ तक कि:

  • मैं कर सकते हैं ':

    TryGetValue("key", out _); 
    

    यह एक जवाब के रूप में जोड़ा जाना चाहिए, लेकिन इस सवाल के लिए ऐसा मत करो, क्योंकि इसे एक डुप्ली के रूप में चिह्नित किया गया था;

  • प्रश्न यह प्रश्न वास्तव में एक अलग चीज़ के लिए पूछताछ की एक डुप्ली के रूप में प्रतीत होता है।
+5

नहीं, नहीं, नहीं, नहीं, नहीं, – Andrey

उत्तर

22

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

सी # 4.0 वैकल्पिक पैरामीटर की अनुमति देता है, लेकिन out पैरामीटर वैकल्पिक नहीं हो सकते हैं।

संपादित करें: BTW, आप भी कर सकते हैं ओवरलोड विधि:

int DoStuff() 
{ 
    int temp; 
    return DoStuff(out temp); 
} 

int DoStuff(out outParam) 
{ 
    //... 
} 
+0

अच्छा, मुझे पता है कि मुझे इसका उपयोग नहीं करना है। मैं किसी भी चर को पारित नहीं करना चाहूंगा। हालांकि यह जवाब है, धन्यवाद। –

7

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

public void DoSomething(int param1, out int param2) 
{ 
    /* Method work here */ 
} 

public void DoSomething(int param1) 
{ 
    int temp; 
    DoSomething(param1, out temp); 
} 
+0

यह उत्तर अधिक कार्यात्मक है। यदि आप इसका उपयोग करना चाहते हैं या इसका उपयोग नहीं करते हैं तो बाद में संशोधित करने की आवश्यकता नहीं है। – elcool

+0

और यदि आपके पास जिस विधि का आप कॉल कर रहे हैं उसका स्वामित्व नहीं है, तो आप अपने लिए आउट पैरामीटर को डमी करने के लिए एक एक्सटेंशन विधि बना सकते हैं। –

0

सी # के बारे में निश्चित नहीं है, लेकिन वीबी.Net में आप बस आउटपुट (बायफ) पैरामीटर के निरंतर पास में जा सकते हैं। तो यदि आपके पास आउटपुट पैरामीटर के रूप में एक पूर्णांक है, तो आपको वास्तविक चर में पास नहीं होना है, आप बस 0, या किसी अन्य वैध पूर्णांक में पास कर सकते हैं। ऑब्जेक्ट्स के लिए, स्ट्रिंग समेत आप बस कुछ भी नहीं कर सकते (सी # में शून्य) और सब कुछ ठीक काम करता है। मुझे यकीन नहीं है कि चर कहाँ संग्रहीत किया जाता है, शायद आपके द्वारा पास किए गए किसी भी अन्य पैरामीटर में स्टैक पर, और जब फ़ंक्शन निकलता है तो यह गायब हो जाता है।

+0

मैंने इसे आज़माया, दुर्भाग्य से यह काम नहीं किया। 'त्रुटि CS1510: एक रेफरी या आउट तर्क एक असाइन करने योग्य चर होना चाहिए'। – MasterMastic

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

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