如何为任何Exception派生的TDetail捕获FaultException?
我试过catch( FaultException<Exception> ) {}
,但这似乎不起作用。
修改的
目的是获得对Detail属性的访问权。
答案 0 :(得分:8)
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);
}
}
反思很慢,但由于异常应该是罕见的......我再次建议将它们分解出去。
答案 1 :(得分:0)
catch (FaultException ex)
{
MessageFault fault = ex.CreateMessageFault();
var objFaultContract = fault.GetDetail<Exception>();
//you will get all attributes in objFaultContract
}