首页 >后端开发 >C++ >如何将 C# 函数转换为表达式?

如何将 C# 函数转换为表达式?

Barbara Streisand
Barbara Streisand原创
2025-01-03 09:25:39930浏览

How Can I Convert a C# Func to an Expression?

转换 C# Func到 Expression>

在 C# 中,lambda 表达式提供了一种表示轻量级函数的便捷方法。虽然将 lambda 转换为 Expression> 很简单,但使用方法调用,可能存在转换 Func 的场景。需要直接转换为表达式。

挑战

但是,由于编译时错误,这样的直接转换是不可能的,如以下代码所示:

public void ContainTheDanger(Func<T> dangerousCall)
{
    try
    {
        dangerousCall();
    }
    catch (Exception e)
    {
        // This next line does not work...
        Expression<Func<T>> DangerousExpression = dangerousCall;
        var nameOfDanger = ((MemberExpression)dangerousCall.Body).Member.Name;
        throw new DangerContainer("Danger manifested while " + nameOfDanger, e);
    }
}

错误源于 Func;表示通用委托而不是表达式。

限制

不幸的是,没有直接的方法来实现所需的转换。尝试从 Func 获取原始表达式由于编译过程中的优化和数据丢失,可能被证明是不可行的。

替代方法

作为替代方案,人们可​​以考虑:

  • 使用反射来检查 Func并推断其预期表达式。
  • 使用自定义表达式编译器或动态对象模型基于 Func 创建表达式树。

但是,这些方法通常涉及复杂的并且容易出错

结论

转换 Func到表达式>直接在 C# 中本质上是具有挑战性的。可以探索替代方法,但代价是增加复杂性和潜在限制。

以上是如何将 C# 函数转换为表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn