为任何Exception派生的TDetail捕获FaultException <TDetail>?

SFu*_*n28 3 .net wcf .net-4.0 faultexception

如何捕获任何Exception派生的TDetail的FaultException?
我尝试过,catch( FaultException<Exception> ) {}但似乎没有用.

编辑
目的是获取对Detail属性的访问权限.

Amy*_*Amy 8

FaultException<>继承自FaultException.所以将代码更改为:

catch (FaultException fx)  // catches all your fault exceptions
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

===编辑===

如果你需要FaultException<T>.Detail,你有几个选择,但没有一个是友好的.最好的解决方案是捕获您想要捕获的每个类型:

catch (FaultException<Foo> fx) 
{
    ...
}
catch (FaultException<Bar> fx) 
{
    ...
}
catch (FaultException fx)  // catches all your other fault exceptions
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我建议你那样做.否则,你将陷入反思.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

反思很慢,但由于异常应该是罕见的......再次,我建议你尽可能地将它们分开.