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

标签 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 等在这里是否合适。想法?谢谢!

最佳答案

假设您不关心返回类型,您需要这样的东西:

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

关于c# - 如何评估作为参数传递给方法的 Func/Delegate/Expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113056/

相关文章:

c# - 如何从exe中找出目标框架名称和版本?

c# - Wpf在Grid内绘制对象集合

.net - 带有 TransferMode.Streamed 的 WCF NetTcpBinding 在 Windows Server 2019 上无法使用 TLS 1.2 和 SslProtocols.None 在 WCF 绑定(bind)上工作

c# - 为什么我不能将属性转换为嵌套元素?

Python - 迭代生成的 lambda 不起作用

c# - 在 Visual Studio 项目中自动包含生成的文件

C# Selenium webdriver JavaScript 错误记录

.net - CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames 问题

python - python中的lambda可以迭代dict吗?

haskell - Haskell 是否提供了与许多可能的数据构造函数进行模式匹配的习语?