Expression<>究竟是什么?用于C#?是否存在将Expression<>自己实例化为对象的情况?如果是这样,请举个例子!
谢谢!
答案 0 :(得分:8)
Expression<T>
几乎完全用于LINQ,但没有。在LINQ中,它通常用于“捕获”代码中表达的逻辑,但将其保存在数据中。然后,LINQ提供商可以检查该数据并进行适当处理 - 例如通过将其转换为SQL。通常LINQ中的表达式树是由编译器从lambda表达式或查询表达式创建的 - 但在其他情况下,直接使用API本身就很方便。
我使用过的其他地方的一些例子,并看到它使用过:
long
和ulong
,它比您预期的要复杂一些有不同的范围)答案 1 :(得分:4)
就LINQ而言,你可以做些事情来在运行时创建比纯粹在lambdas中更多样化的LINQ查询。
我多次使用Expression
作为微编译器,作为DynamicMethod
和IL的替代品。这种方法在.NET 4.0(as discussed on InfoQ)中变得更强,但即使在3.5中也有很多你可以做的事情(通常基于运行时数据;配置等):
我还将它作为数学引擎的一部分用于我对Microsoft所做的一些工作 - 即将数学表达式(“(x + 12)* y = z”等)解析为Expression
树,编译它并运行它。
另一个有用的用法(由Jason Bock说明,here)是遗传编程;将您的候选人建立为Expression
树,并且您拥有必要的代码来快速执行它们(Compile()
之后),但重要的是(对于遗传编程),也可以交换片段。
答案 2 :(得分:0)
看看我之前和之后在my answer to another SO question中的代码之后。
总结:Expression<>
大大简化了代码,使其更易于理解,甚至修复了幻像错误。