我想编写一个扩展方法,该方法将运行某个对象的方法,并返回执行期间发生的异常(如果有)。

换句话说,使myObject.Foo()动态成为anyObject.AnyMethod(...)。

Exception incurredException = null;
try
{
    myObject.Foo();
}
catch(Exception e)
{
    incurredException = e;
}

return incurredException;


对此:

Exception e = IncurredException( () => myObject.Foo() );


我不知道Func,Expression,Delegate等在这里是否合适。有什么想法吗?谢谢!

最佳答案

假设您不在乎返回类型,则需要这样的东西:

public static Exception IncurredException(Action action)
{
    try
    {
        action();
    }
    catch (Exception e)
    {
        return e;
    }

    return null;
}


然后,您可以根据需要调用它:

Exception e = IncurredException( () => myObject.Foo() );


或者使用var和方法组语法更简洁:

var e = IncurredException(myObject.Foo);

08-04 20:45