मान लें कि ब्लॉक के अंदर return
कथन के साथ आपके पास सी # विधि है। क्या finally
ब्लॉक में वापसी मान को संशोधित करना संभव है?क्या सी # में अंत में खंड में वापसी मूल्य को बदलना संभव है?
स्पष्ट दृष्टिकोण, finally
ब्लॉक में return
का उपयोग कर, काम करेंगे नहीं:
String Foo()
{
try
{
return "A";
}
finally
{
// Does not compile: "Control cannot leave the body of a finally clause"
return "B";
}
}
दिलचस्प है, इस वीबी में किया जा सकता: Return
Finally
अंदर से मना किया है, लेकिन हम दुरुपयोग कर सकते हैं तथ्य यह है कि (शायद पीछे की संगतता के कारणों के लिए) वीबी अभी भी वापसी मूल्य को विधि नाम पर निर्दिष्ट करके संशोधित करने की अनुमति देता है:
Function Foo() As String ' Returns "B", really!
Try
Return "A"
Finally
Foo = "B"
End Try
End Function
नोट्स:
ध्यान दें कि मैं इस सवाल विशुद्ध रूप से वैज्ञानिक जिज्ञासा से बाहर पूछना; जाहिर है, इस तरह का कोड अत्यधिक त्रुटि-प्रवण और भ्रमित है और कभी लिखा नहीं जाना चाहिए।
ध्यान दें कि मैं
try { var x = "A"; return x; } finally { x = "B"; }
पूछ रहा हूं। मुझे पता है कि यह वापसी मूल्य और I understand why this happens नहीं बदलता है। मैं जानना चाहता हूं कि अंततः ब्लॉक के माध्यम से प्रयास ब्लॉक के अंदर रिटर्न वैल्यू सेट को बदलने के तरीके हैं।
वीबीएनईटी का दुरुपयोग करना बंद करें - इसे पहले से ही पर्याप्त दुर्व्यवहार हो जाता है! – Oded
सिर्फ इसलिए कि आप * वीबी में ऐसा कर सकते हैं इसका मतलब यह नहीं है कि आपको * चाहिए *! –
वीबीएनईटी का उपयोग बंद करो - इसे पहले से ही पर्याप्त उपयोग मिल जाता है! – PhonicUK