Tôi muốn bắt tất cả các biến thể của một lớp ngoại lệ chung và tôi đã tự hỏi liệu có cách nào để làm điều đó mà không có nhiều khối bắt không. Ví dụ: tôi có một lớp ngoại lệ:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
và hai lớp dẫn xuất:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
có cách bắt cả hai MyDerivedStringException
và MyDerivedIntException
trong một khối bắt.
Tôi đã thử điều này:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
nhưng nó không sạch sẽ lắm và có nghĩa là tôi không có quyền truy cập MyProperty
.
Tôi quan tâm đến một giải pháp chung cho vấn đề nhưng trong trường hợp của tôi, Ngoại lệ chung được xác định trong thư viện bên thứ ba, như được chỉ ra dưới đây thêm một số ràng buộc bổ sung cho vấn đề.
Exception
vàMyException<T>
sẽ ổn.