如何评估作为参数传递给方法的Func / Delegate / Expression?

时间:2014-06-09 02:53:56

标签: c# .net lambda delegates func

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

换句话说,使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等是否合适。思考?谢谢!

1 个答案:

答案 0 :(得分:2)

假设您不关心返回类型,则需要以下内容:

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