gpt4 book ai didi

.net - 表达式树.net

转载 作者:行者123 更新时间:2023-12-04 22:37:07 25 4
gpt4 key购买 nike

我想很好地掌握这个主题,因此想向社区提出以下问题:

  • 表达树有什么好处?
  • 这句话到底是什么意思:“表达式树是编译为代码的数据”?
  • .net 上下文中的表达式树和函数式编程解决了哪些常见挑战?
  • 有什么好的在线资源可以加快主题的速度?
  • 最佳答案

    What benefits do expression trees bring to table?



    表达式树允许程序在运行时以简化的方式操作它自己的部分实现。它们允许表达式作为其结构的表示来传递,而不仅仅是可以调用的委托(delegate)。

    What exactly does this statement mean: "Expression Trees are data compiled as code"?



    C#/.NET 之前的语言已经支持这种操作……最好的例子是 LISP。在程序内的数据结构中表示程序结构的能力称为 homoiconicity . C# 以表达式树的形式支持有限的同音性。 C# 语言允许从代码中的(子集)表达式透明地创建表达式树。例如:
    int x = 3;
    Expression<Func<bool>> IsXLessThan4Expr = () => x < 4;

    Func<bool> IsXLessThan4 = () => x < 4;

    变量 IsXLessThan4Expr是从 lambda 表达式中捕获的表达式树。如果我们想了解它的结构是什么,我们现在可以遍历该表达式的表示 - 如果我们愿意,可以操纵它。代表 IsXLessThan4 ,相比之下,不能被检查......它只能被调用。当然,您总是可以获取任何方法的原始 IL(假设您拥有必要的权限)——但是从 IL 反转程序的逻辑结构比从表达式树反转要困难得多。

    What common challenges do the Expression Trees and functional programming in the context of .net solve?



    使用表达式树解决重要问题的最佳示例是在 LINQ-to-SQL 中,其中 IQueryable 的实现能够将用 C# 编写的查询表达式树转换为可以由数据库执行的等效 SQL 查询。

    表达式树还使得动态生成 C# 代码成为可能——因为表达式树可以编译成 lambda。这是一个例子:
    var paramNotification = 
    Expression.Parameter(typeof (NotificationEntry), "noti");

    Func<NotificationEntry, bool> predicate =
    m_PredicateExpr = Expression.Lambda<Func<NotificationEntry, bool>>(
    Expression.LessThan(
    Expression.Property(paramNotification, "Value"),
    Expression.Constant(100)),
    new[] {paramNotification})
    .Compile();

    上面的代码片段创建了一个比较 Value 的表达式。 NotificationEntry 的字段对象到某个提供的常量 (100) - 并将其编译成我们可以调用的 lambda。

    What are good online resources to get up the speed on the subject?



    MSDN可能是您目前最好的选择。

    关于.net - 表达式树.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145940/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com