题
C# 中 Expression<> 到底有什么用?是否有任何场景您会将 Expression<> 自己实例化为对象?如果是的话请举个例子!
谢谢你!
解决方案
Expression<T>
几乎完全用于 LINQ,但事实并非如此 有 成为。在 LINQ 中,它通常用于“捕获”代码中表达的逻辑,但将其保留在数据中。然后,LINQ 提供程序可以检查该数据并进行适当处理 - 例如通过将其转换为 SQL。通常,LINQ 中的表达式树是由编译器根据 lambda 表达式或查询表达式创建的 - 但在其他情况下,您自己直接使用 API 会很方便。
我在其他地方使用过它并看到它使用过的一些例子:
其他提示
就 LINQ 而言,您可以采取一些措施来在运行时创建比纯粹使用 lambda 更通用的 LINQ 查询。
我用过 Expression
很多次作为微编译器,作为替代 DynamicMethod
和伊利诺伊州。这种方法在 .NET 4.0 中变得更强大(正如 InfoQ 上所讨论的),但即使在 3.5 中也有 地段 您可以做的事情(通常基于运行时数据;配置等):
我还将它用作我与 Microsoft 合作的一些工作的数学引擎的一部分 - 即将数学表达式(“(x + 12) * y = z”等)解析为 Expression
树,编译并运行它。
另一个有趣的用途(由 Jason Bock 插图, 这里) 从事遗传编程;将你的候选人建立为 Expression
树,并且您有必要的代码来快速执行它们(之后 Compile()
),但重要的是(对于遗传编程),还可以交换片段。
看看我之前和之后在我对另一个SO问题的回答中的代码之后。/ p>
摘要: Expression&lt;&gt;
大大简化了代码,使其更易于理解,甚至修复了幻像错误。