Gostaria de pegar todas as variantes de uma classe de exceção genérica e queria saber se existe uma maneira de fazer isso sem vários blocos de captura. Por exemplo, digamos que eu tenho uma classe de exceção:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
e duas classes derivadas:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
existe uma maneira de capturar ambos MyDerivedStringException
e MyDerivedIntException
em um bloco de captura.
Eu tentei isso:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
mas não é muito limpo e significa que não tenho acesso MyProperty
.
Estou interessado em uma solução geral para o problema, mas no meu caso, a exceção genérica é definida em uma biblioteca de terceiros que, conforme indicado abaixo, adiciona algumas restrições adicionais ao problema.
Exception
eMyException<T>
seria adequada.