Vorrei catturare tutte le varianti di una classe di eccezione generica e mi chiedevo se esiste un modo per farlo senza più blocchi di cattura. Ad esempio dire che ho una classe di eccezione:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
e due classi derivate:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
c'è un modo per catturare entrambi MyDerivedStringException
e MyDerivedIntException
in un blocco di cattura.
Ho provato questo:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
ma non è molto pulito e significa che non ho accesso a MyProperty
.
Sono interessato a una soluzione generale al problema, ma nel mio caso l'eccezione generica è definita in una libreria di terze parti che, come indicato di seguito, aggiunge alcuni ulteriori vincoli al problema.
Exception
eMyException<T>
andrebbe bene.