Ich möchte alle Varianten einer generischen Ausnahmeklasse abfangen und habe mich gefragt, ob es eine Möglichkeit gibt, dies ohne mehrere catch-Blöcke zu tun. Angenommen, ich habe eine Ausnahmeklasse:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
und zwei abgeleitete Klassen:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
Gibt es eine Möglichkeit, beide MyDerivedStringException
und MyDerivedIntException
in einem Fangblock zu fangen?
Ich habe das versucht:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
aber es ist nicht sehr sauber und bedeutet, dass ich keinen Zugang zu habe MyProperty
.
Ich bin an einer allgemeinen Lösung des Problems interessiert, aber in meinem Fall wird die generische Ausnahme in einer Bibliothek eines Drittanbieters definiert, die, wie unten ausgeführt, dem Problem einige zusätzliche Einschränkungen hinzufügt.
Exception
undMyException<T>
wäre in Ordnung.