我在检查switch语句的正确类型时遇到了一些麻烦。我有这些继承自Exception
的类。
public abstract class DomainException<T>: Exception
{
public readonly DomainExceptionCodes Code;
public readonly T Metadata;
public DomainException(DomainExceptionCodes code, T metadata): base(message: code.GetEnumDescription())
{
Code = code;
Metadata = metadata;
}
}
public class EmptyFieldsException : DomainException<EmptyFieldsMetadata>
{
public EmptyFieldsException(EmptyFieldsMetadata metadata) : base(code: DomainExceptionCodes.EmptyField, metadata)
{
}
}
假设有一堆派生类。我需要做的是,在处理异常时能够以相同的方式管理所有派生类。
类似于:
try{
// code that raise the exception
}
catch (Exception e) {
// some code here
switch(e) {
case DomainException:
// do something
break;
default:
//other code here
break;
}
}
然而,因为
DomainException
至少需要一个泛型参数,所以它会引发错误。
我尝试使用object
和dynamic
,但类型不匹配。
有任何线索吗?
catch(DomainException e)
需要一个泛型类型参数,而dynamic
和object
不匹配。我不想为每个派生类都写一个catch
或者case
,我想使用基类。 - Rumpelstinsk