如何为任何从异常派生的TDetail捕获FaultException?
我尝试了catch( FaultException<Exception> ) {}
,但似乎不起作用。
编辑
目的是获得对Detail属性的访问。
最佳答案
FaultException<>
从FaultException
继承。因此,将代码更改为:
catch (FaultException fx) // catches all your fault exceptions
{
...
}
===编辑===
如果需要
FaultException<T>.Detail
,则有两种选择,但都不是友好的。最好的解决方案是捕获要捕获的每种类型:catch (FaultException<Foo> fx)
{
...
}
catch (FaultException<Bar> fx)
{
...
}
catch (FaultException fx) // catches all your other fault exceptions
{
...
}
我建议你那样做。否则,您将陷入反思。
try
{
throw new FaultException<int>(5);
}
catch (FaultException ex)
{
Type exType = ex.GetType();
if (exType.IsGenericType && exType.GetGenericTypeDefinition().Equals(typeof(FaultException<>)))
{
object o = exType.GetProperty("Detail").GetValue(ex, null);
}
}
反思很慢,但是既然异常应该很少见……我建议尽你所能地将它们打破。