Saya ingin menangkap semua varian dari kelas pengecualian umum dan saya bertanya-tanya apakah ada cara untuk melakukannya tanpa beberapa blok penangkap. Sebagai contoh katakanlah saya memiliki kelas pengecualian:
public class MyException<T> : Exception
{
public string MyProperty { get; }
public MyException(T prop) : base(prop.ToString())
{
MyProperty = prop?.ToString();
}
}
dan dua kelas turunan:
public class MyDerivedStringException : MyException<string>
{
public MyDerivedStringException(string prop) : base(prop)
{
}
}
public class MyDerivedIntException : MyException<int>
{
public MyDerivedIntException(int prop) : base(prop)
{
}
}
apakah ada cara menangkap keduanya MyDerivedStringException
dan MyDerivedIntException
dalam satu blok tangkapan.
Saya sudah mencoba ini:
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
tetapi tidak sangat bersih dan berarti saya tidak memiliki akses ke MyProperty
.
Saya tertarik pada solusi umum untuk masalah ini, tetapi dalam kasus saya, Pengecualian generik didefinisikan di perpustakaan pihak ketiga yang sebagaimana ditunjukkan di bawah ini menambahkan beberapa kendala tambahan untuk masalah tersebut.
Exception
danMyException<T>
akan baik-baik saja.