일반 예외 클래스의 모든 변형을 잡고 싶습니다. 여러 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
하나 개의 catch 블록은.
나는 이것을 시도했다 :
try
{
...
}
catch(Exception e) when (e is MyDerivedStringException || e is MyDerivedIntException)
{
}
그러나 그것은 매우 깨끗하지 않으며 내가 액세스 할 수 없음을 의미합니다 MyProperty
.
나는 문제에 대한 일반적인 해결책에 관심이 있지만 내 경우에는 일반적인 지적 예외가 타사 라이브러리에 정의되어 있으며 아래 지적 된 것처럼 문제에 대한 추가 제약 조건이 추가되었습니다.
Exception
와MyException<T>
괜찮을 것입니다.