मैं एक सामान्य अपवाद वर्ग के सभी वेरिएंट को पकड़ना चाहूंगा और मुझे आश्चर्य हो रहा था कि क्या एक से अधिक कैच ब्लॉक के बिना ऐसा करने का कोई तरीका है। उदाहरण के लिए, मेरे पास एक अपवाद वर्ग है:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
और दो व्युत्पन्न वर्ग:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
वहाँ दोनों को पकड़ने MyDerivedStringExceptionऔर MyDerivedIntExceptionएक ब्लॉक में पकड़ने का एक तरीका है ।
मैंने यह कोशिश की है:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
लेकिन यह बहुत साफ नहीं है और इसका मतलब है कि मेरी पहुंच नहीं है MyProperty।
मैं समस्या के एक सामान्य समाधान में दिलचस्पी रखता हूं, लेकिन मेरे मामले में जेनेरिक अपवाद एक तीसरे पक्ष के पुस्तकालय में परिभाषित किया गया है, जो नीचे बताया गया है, समस्या के लिए कुछ अतिरिक्त बाधाओं को जोड़ता है।
ExceptionऔरMyException<T>ठीक होगा।