如何为任何从异常派生的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);
    }
}


反思很慢,但是既然异常应该很少见……我建议尽你所能地将它们打破。

10-07 23:08