【发布时间】:2010-11-28 08:35:31
【问题描述】:
Expression 在 C# 中究竟是做什么用的?是否有任何场景可以将 Expression 自己实例化为对象?如果有,请举个例子!
谢谢!
【问题讨论】:
标签: c# expression
Expression 在 C# 中究竟是做什么用的?是否有任何场景可以将 Expression 自己实例化为对象?如果有,请举个例子!
谢谢!
【问题讨论】:
标签: c# expression
Expression<T> 几乎完全用于 LINQ,但它没有必须。在 LINQ 中,它通常用于“捕获”以代码表示的逻辑,但将其保存在数据中。然后可以由 LINQ 提供程序检查该数据并进行适当处理 - 例如通过将其转换为 SQL。通常 LINQ 中的表达式树是由编译器根据 lambda 表达式或查询表达式创建的 - 但在其他情况下,您自己直接使用 API 会很方便。
我用过和看到过的其他地方的一些例子:
long 和ulong 具有不同的范围)李>
【讨论】:
就 LINQ 而言,您可以做一些事情来在运行时创建比纯粹在 lambda 中更通用的 LINQ 查询。
我多次使用Expression 作为微编译器,作为DynamicMethod 和IL 的替代品。这种方法在 .NET 4.0 (as discussed on InfoQ) 中变得更强大,但即使在 3.5 中,您也可以做很多事情(通常基于运行时数据;配置等):
我还将它用作数学引擎的一部分,用于我在 Microsoft 所做的一些工作 - 即将数学表达式(“(x + 12)* y = z”等)解析为 Expression 树,编译它并运行它。
另一个有趣的用途(由 Jason Bock 说明,here)是基因编程;将候选者构建为 Expression 树,并且您拥有快速执行它们的必要代码(在 Compile() 之后),但重要的是(对于基因编程),还可以交换片段。
【讨论】:
看看我在my answer to another SO question 中的前后代码。
总结:Expression<> 大大简化了代码,更容易理解,甚至修复了一个幻影。
【讨论】: