Me gustaría capturar todas las variantes de una clase de excepción genérica y me preguntaba si hay una manera de hacerlo sin múltiples bloques de captura. Por ejemplo, digamos que tengo una clase de excepción:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
y dos clases derivadas:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
¿Hay alguna manera de atrapar a ambos MyDerivedStringExceptiony MyDerivedIntExceptionen un bloque de captura?
He intentado esto:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
pero no está muy limpio y significa que no tengo acceso MyProperty.
Estoy interesado en una solución general al problema, pero en mi caso la excepción genérica se define en una biblioteca de terceros que, como se señala a continuación, agrega algunas restricciones adicionales al problema.
ExceptionyMyException<T>estaría bien.