一般的な例外クラスのすべてのバリアントをキャッチしたいと思います。複数のcatchブロックなしでそれを行う方法があるかどうか疑問に思っていました。たとえば、例外クラスがあるとします。
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
および2つの派生クラス:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
両方MyDerivedStringException
とMyDerivedIntException
1つのキャッチブロックでキャッチする方法はありますか。
私はこれを試しました:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
しかし、それはあまりきれいではなく、私はにアクセスできませんMyProperty
。
私は問題の一般的な解決策に興味がありますが、私の場合、一般的な例外はサードパーティのライブラリで定義されています。
Exception
ありMyException<T>
ません。