3

TDetail から派生した例外の FaultException をキャッチするにはどうすればよいですか?
試してみcatch( FaultException<Exception> ) {}ましたが、うまくいかないようです。

編集
目的は、Detail プロパティにアクセスすることです。

4

2 に答える 2

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);
    }
}

リフレクションは遅いですが、例外はめったに発生しないはずなので... 繰り返しになりますが、できる限りそれらを分割することをお勧めします。

于 2011-06-07T18:09:16.607 に答える