我正在阅读有关表达式树功能以及如何使用 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/