Что вы можете сделать, это написать приведенный выше код в методе, который принимает Action или Func в качестве параметра, который определяет метод, который должен быть вызван в блоке throw, вместе с его параметрами.
что если вы вызовете M(1, "string")
в своем блоке броска, он станет DoStuff(M, 1, "string")
DoStuff будет выглядеть как
void DoStuff<T1, T2, TResult>(Func<T1, T2, TResult> myMethod, T1 arg1, T2 arg2)
{
try
{
myMethod(arg1, arg2)
}
catch (FaultException<CustomException> cfex)
{
// common stuff
}
catch (CustomException cfex)
{
// common stuff
}
catch (Exception ex)
{
// common stuff
}
finally
{
FinalizeServiceCall(wsBus, wsMessage, response, logProps);
}
}