मैं आउटपुट पैरामीटर का उपयोग करने के पक्ष में हूं। मेरी राय में, यह ऐसी स्थिति है जिसके लिए आउटपुट पैरामीटर का उपयोग सबसे उपयुक्त है।
हाँ, आप यदि और केवल यदि आप एक विकल्प के मूल्य है कि आप अपने कोड के बाकी हिस्सों में उपयोग कर सकते हैं अपने कोड एक एक लाइनर के रूप में रखने के लिए सम्मिलित ऑपरेटर का उपयोग कर सकते हैं। मुझे अक्सर लगता है कि यह मेरे लिए मामला नहीं है, और यदि मैं एक मूल्य पुनर्प्राप्त करने में सफलतापूर्वक सक्षम था, तो मैं एक अलग कोड पथ निष्पादित करना पसंद करूंगा।
int value;
if(DoSomethingWonderful(out value))
{
// continue on your merry way
}
else
{
// oops
Log("Unable to do something wonderful");
if (DoSomethingTerrible(out value))
{
// continue on your not-so-merry way
}
else
{
GiveUp();
}
}
साथ ही, यदि मूल्य है कि मैं प्राप्त करना चाहते हैं वास्तव में नल, तो एक आउटपुट पैरामीटर और एक बूलियन वापसी मान के साथ एक समारोह का उपयोग कर रहा है, मेरी राय में, सबसे आसान तरीका है के बीच अंतर बताने के लिए "मैं मान को पुनः प्राप्त करने में असफल रहा "और" मैंने जो मूल्य पुनर्प्राप्त किया वह शून्य है "। कभी कभी मैं इस तरह के निम्न उदाहरण में, उस भेद के बारे में परवाह:
private int? _Value;
private bool _ValueCanBeUsed = false;
public int? Value
{
get { return this._Value; }
set
{
this._Value = value;
this._ValueCanBeUsed = true;
}
}
public bool DoSomethingTerrible(out int? value)
{
if (this._ValueCanBeUsed)
{
value = this._Value;
// prevent others from using this value until it has been set again
this._ValueCanBeUsed = false;
return true;
}
else
{
value = null;
return false;
}
}
मेरी राय में, क्योंकि वे वाक्य रचना बोझिल लगता है एकमात्र कारण ज्यादातर लोगों उत्पादन पैरामीटर का उपयोग करने नहीं करते है। हालांकि, मुझे सचमुच लगता है कि आउटपुट पैरामीटर का उपयोग इस समस्या के लिए अधिक उपयुक्त समाधान है, और मैंने पाया कि एक बार जब मैं इसका उपयोग करता हूं तो मुझे एक शून्य मूल्य लौटने के लिए वाक्यविन्यास बहुत बेहतर लगता है।
स्रोत
2009-11-25 22:03:20
बस जो मैं लिखने जा रहा था। इसका मतलब यह भी है कि यदि आपको इसकी आवश्यकता नहीं है तो आपको एक अलग चर घोषित करने की आवश्यकता नहीं है। असल में यह अधिक तरल पदार्थ अभिव्यक्तियों की अनुमति देता है। –
वाह !!!! मैंने सिर्फ जॉन स्कीट को एक एसओ जवाब पर छूट दी !!! मैं आज रात सो नहीं पाऊंगा! – Manu
यह वास्तव में अच्छा है। यह इस बात पर निर्भर करता है कि इस नल को कैसे संभाला जाना चाहिए। प्रश्न में "यह भी असफल हो सकता है" के कारण, मैंने माना कि यह एक त्रुटि है और इसे इस तरह अनदेखा नहीं किया जाना चाहिए। यदि यह कर सकता है, तो यह दृष्टिकोण निश्चित रूप से सबसे अच्छा है। –