मुझे अपनी कंपनी के कोडबेस (.NET 3.5 एप्लीकेशन) में निम्नलिखित कोड पैटर्न सभी जगह दिखाई देते हैं:
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
मैं अपने सिर को चारों ओर लपेटने की कोशिश कर रहा हूं कि ऐसा करने के बजाय आप ऐसा क्यों करेंगे क्योंकि Fooविधि केवल आईडी लेती है और एक Bazवस्तु लौटाती है, इसके बजाय एक मूल्य वापस नहीं किया जाता है जिसका उपयोग नहीं किया जाता है और वास्तविक वस्तु एक रेफ या आउटपुट पैरामीटर होता है।
क्या इस कोडिंग शैली का कुछ छिपा हुआ लाभ है जो मुझे याद आ रहा है?
bazकिया जा रहा है nullऔर वापस आ boolजा रहा है falseकर रहे हैं नहीं के बराबर। new BazObject()ऐसा कभी नहीं होता है null, इसलिए जब तक bazObjectइसे Exceptionफेंका नहीं जाता है Foo, जब falseलौटाया जाता है , तब तक इसे अपडेट bazनहीं किया जाएगा null। यह काफी मदद मिलेगी अगर कल्पना के लिए Fooउपलब्ध थे। वास्तव में, यह इस कोड द्वारा प्रदर्शित सबसे गंभीर समस्या है।