表达式树是核心语言功能还是 BCL 对象/库的功能?如果没有 C# 的核心语言功能,您就无法构建它吗?
问问题
454 次
2 回答
3
不,表达式树不是语言功能。它们可用于任何 .NET 语言,因此它们不能是 C# 特定的。它们是在内置程序集中定义的普通 CLR 类型。
通过 lambda 表达式(和 LINQ)的构造是 C# 特定的。但是你总是可以Expression
手动构建一个等价物。C# 编译器本身只是发出对众所周知的Expression
静态构造方法的调用。您可以通过反编译将 Reflector 配置为旧 .NET 版本的二进制文件来检查编译器发出的内容。
表达式树是否使用 .NET Framework 内部 API 是一个不相关的问题,但我想不出他们需要这样做的任何理由。
于 2013-04-26T21:19:49.073 回答
0
从Expression
类定义中可以看出,它是在System.Linq.Expressions
命名空间中定义的。这一点,Expression 不是 C# 语言功能 - 它是一个可供所有以 CLR 为目标的语言使用的类。
例如,这里是 MSDN 上一篇题为“表达式树(C# 和 Visual Basic) ”的文章,说明了如何使用 C# 和 VB.NET 创建和使用表达式树。
于 2013-04-26T21:38:45.317 回答