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);
}
}
Отражение медленное, но так как исключения должны быть редкими ... опять же, я советую разбить их, как вы можете.