Мені хотілося б спіймати всі варіанти загального винятку класу винятків, і мені було цікаво, чи є спосіб зробити це без безлічі блоків вилову. Наприклад, скажіть, що у мене клас виключень:
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>було б добре.