यह प्रश्न How to indicate that a method was unsuccessful से अनुवर्ती है। Xxx() Tryxxx() पैटर्न कुछ ऐसा है जो कई पुस्तकालयों में बहुत उपयोगी हो सकता है। मैं सोच रहा हूं कि मेरे कोड को डुप्लिकेट किए बिना दोनों कार्यान्वयन की पेशकश करने का सबसे अच्छा तरीका क्या है।"TryParse/Parse like" पैटर्न: इसे लागू करने का सबसे अच्छा तरीका क्या है
क्या सबसे अच्छा है:
public int DoSomething(string a)
{
// might throw an exception
}
public bool TrySomething(string a, out result)
{
try
{
result = DoSomething(a)
return true;
}
catch (Exception)
{
return false;
}
या
public int DoSomething(string a)
{
int result;
if (TrySomething(a, out result))
{
return result;
}
else
{
throw Exception(); // which exception?
}
}
public bool TrySomething(string a, out result)
{
//...
}
मैं सहज मान चाहते हैं कि पहला उदाहरण अधिक सही है (यदि आप वास्तव में पता है जो अपवाद हुआ), लेकिन कोशिश नहीं कर सका/पकड़ बहुत महंगा हो? क्या दूसरे उदाहरण में अपवाद को पकड़ने का कोई तरीका है?
मैं आपकी वृत्ति से सहमत हूं (यदि संभव हो तो TryX मामले के अपवाद से बचें) जब तक TryX के आपके कार्यान्वयन को अपवाद नहीं लेना पड़ेगा (यानी अपवाद आपके कोड द्वारा उत्पन्न किया जा रहा है, कोड नहीं आप कॉल करें)। –
इसके अलावा, मुझे यकीन नहीं है कि आपका क्या मतलब है "क्या दूसरे उदाहरण में अपवाद को पकड़ने का कोई तरीका है?" - क्या अपवाद पकड़ो?आप DoSomething से फेंकना चाहते हैं (हालांकि आप जो हुआ उससे अपवाद को फेंक देंगे, सामान्य नहीं)। –
@ जोनाथन: मेरा मतलब था "आंतरिक प्रसंस्करण में हुई अपवाद को दोबारा जोड़ना, जिस तरह से कॉलर जान सकता है कि त्रुटि क्या हुई है" – Luk