c# - 何时何地使用表达式树

标签 c# linq

我正在阅读有关表达式树功能以及如何使用 lambda 表达式创建委托(delegate)的内容。我仍然不知道它在什么情况下有用,以及我应该在什么真实世界的例子中使用它。

最佳答案

表达式树的主要用途是用于进程外的 LINQ 提供程序,例如 LINQ to SQL。

当你这样写的时候:

var query = people.Where(x => x.Age > 18)
                  .Select(x => x.Name);

这些 lambda 表达式可以或者转换为委托(delegate),然后可以执行委托(delegate)(就像它们在 LINQ to Object 中一样)或者它们可以转换为表达式树,查询源可以对其进行分析并采取相应的行动(例如,将它们转换为 SQL、Web 服务调用等)。区别在于表达式树将代码表示为数据。如有必要,可以将它们编译成委托(delegate),但通常(无论如何在 LINQ 中)它们从不直接执行 - 只是检查以找出它们包含的逻辑。

表达式树也广泛用于动态语言运行时,它们表示在评估动态表达式时应执行的代码。表达式树非常适合这种情况,因为它们可以再次组合和分解,并且在它们被编译后,生成的 IL 将像往常一样进行 JIT 编译。

大多数开发人员永远不需要弄乱表达式树 API,尽管它还有一些其他用途。

关于c# - 何时何地使用表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3528578/

相关文章:

c# - telerik mvc 控件套件付费/开源之间的区别

C# 重构巨大的 switch 语句以使用 LINQ 进行排序

c# - IEnumerable.Except 不起作用,那我该怎么办?

c# - AutoFixture:如何使用 ISpecimenBuilder 创建多态对象

CodeRunner 2 中的 C# 汇编

c# - IEnumerable - 返回元素两侧范围内的项目

c# - 如何将右侧 "where"传递给 C# 中的 IQueryable 实例化?

c# - 在 LINQ 中使用 OrderBy 首先是西里尔字母,然后是拉丁字母

c# - 如何从代码以兼容模式执行程序?

c# - MVVM - 通过双击选择列表框中的项目并加粗