から派生したさまざまなクラスがある場合を考えてみましょうMyFaultBase
。そのため、Web サービスが障害を示す必要がある場合、type の例外がスローされますFaultException<MySpecificFault>
。
この例外をキャッチした後、FaultException<T>
が から派生したクラスにバインドされているかどうかをどのように判断できますかMyFaultBase
?
私が知る限り、ジェネリック クラスを is-check する簡単な方法はありません。ジェネリック パラメータの柔軟性が原因である可能性があります。ここに解決策があります:
public static bool IsExceptionBoundToType(FaultException fe, Type checkType)
{
bool isBound = false;
// Check to see if the FaultException is a generic type.
Type feType = fe.GetType();
if (feType.IsGenericType && feType.GetGenericTypeDefinition() == typeof(FaultException<>))
{
// Check to see if the Detail property is a class of the specified type.
PropertyInfo detailProperty = feType.GetProperty("Detail");
if (detailProperty != null)
{
object detail = detailProperty.GetValue(fe, null);
isBound = checkType.IsAssignableFrom(detail.GetType());
}
}
return (isBound);
}
例外をキャッチし、次のように確認します。
catch (Exception ex)
{
if ((ex is FaultException) && IsExceptionBoundToType(ex, typeof(MyFaultBase)))
{
// do something
}
}