我如何评估作为参数传递给方法的函数/委托/表达式

本文关键字:方法 函数 委托 参数传递 表达式 何评估 评估 | 更新日期: 2023-09-27 18:07:54

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

换句话说,将myObject.Foo()动态设置为anyObject.AnyMethod(…)。

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

:

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

我不知道如果一个函数,表达式,委托等在这里是合适的。想法吗?谢谢!

我如何评估作为参数传递给方法的函数/委托/表达式

假设您不关心返回类型,那么您需要这样做:

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