gpt4 book ai didi

c# - 编译表达式树的误解?

转载 作者:太空狗 更新时间:2023-10-29 18:18:59 24 4
gpt4 key购买 nike

我有这样的表达:

Expression<Func<string, bool>> f = s => s.Length < 5;

enter image description here

ParameterExpression p = Expression.Parameter (typeof (string), "s");
MemberExpression stringLength = Expression.Property (p, "Length");
ConstantExpression five = Expression.Constant (5);
BinaryExpression comparison = Expression.LessThan (stringLength, five);
Expression<Func<string, bool>> lambda= Expression.Lambda<Func<string, bool>> (comparison, p);

//让我们:测试

Func<string, bool> runnable = lambda.Compile();
Console.WriteLine (runnable ("kangaroo")); // False
Console.WriteLine (runnable ("dog")); //True

我想问一下.Compile()

它编译了什么?第一次执行与后来执行之间有什么区别...?

编译应该是只发生一次,以后不会再发生的事情....

它对我有什么帮助/如何帮助我?

最佳答案

当您在运行时构建表达式树时,不会发出任何代码。这是一种在运行时表示 .NET 代码的方法。

一旦您调用 .Compile表达式树上的方法发出实际的 IL 代码以将此表达式树转换为可以在运行时调用的委托(delegate)(在您的情况下为 Func<string, bool>)。所以这棵表达式树所代表的代码只有编译后才能执行。

调用 Compile 是一项开销很大的操作。基本上,您应该调用它一次,然后缓存生成的委托(delegate),您可以使用它多次调用代码。

关于c# - 编译表达式树的误解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9453322/

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