सबसे पहले, ऐसा लगता है कि आप अक्सर कोशिश/पकड़ का उपयोग कर सकते हैं - खासकर अगर आप Exception
पकड़ रहे हैं। प्रयास/पकड़ ब्लॉक अपेक्षाकृत दुर्लभ होना चाहिए; जब तक आप वास्तव में अपवाद को "संभाल" नहीं सकते हैं, तो आपको इसे स्टैक की अगली परत तक बुलबुला करना चाहिए।
अब, आपको लगता है कि आप वास्तव में चाहते हैं कि ये सभी प्रयास/पकड़ ब्लॉक हैं, यह प्रतिनिधि बनाने का विकल्प क्यों नहीं है? अज्ञात विधियों और लैम्ब्डा अभिव्यक्तियों के साथ-साथ System
नामस्थान में Func/Action प्रतिनिधियों के साथ, मूल रूप से करने के लिए बहुत कम काम है। आप लिखते हैं:
public void SurroundWithTryCatch(Action action)
{
try
{
action();
}
catch(Exception ex)
{
//something even more boring stuff
}
}
और फिर अपने SurroundWithTryCatch(MyMethod)
तरीके से कार्य करेंगे, अगर यह कोई paramaters लेता है।
वैकल्पिक रूप से, अगर आप एक अलग विधि कॉल नहीं करना चाहते, बस लिखना:
public void MyMethod()
{
SurroundWithTryCatch(() =>
{
// Logic here
});
}
आप विधि से वापस जाने के लिए की जरूरत है, तो आप कर सकते हैं:
public int MyMethod()
{
return SurroundWithTryCatch(() =>
{
// Logic here
return 5;
});
}
SurroundWithTryCatch
के जेनेरिक अधिभार के साथ:
public T SurroundWithTryCatch<T>(Func<T> func)
{
try
{
return func();
}
catch(Exception ex)
{
//something even more boring stuff
}
}
इनमें से अधिकांश सी # 2 में भी ठीक होंगे, लेकिन टाइप अनुमान आपको उतना ही मदद नहीं करेगा और आपको लैम्ब्डा अभिव्यक्तियों के बजाय अनाम विधियों का उपयोग करना होगा।
हालांकि शुरुआत में वापस जाने के लिए: कम बार कोशिश/पकड़ने का प्रयास करें। (कोशिश करें/अंततः अधिक बार होना चाहिए, हालांकि आमतौर पर उपयोग कथन के रूप में लिखा जाता है।)
@ जोन आह तुमने मुझे मार दिया यह..आम आप;) –