c# - Expression.Reduce() 是做什么的?

标签 c# .net lambda expression-trees

几天来我一直在研究表达式树,我很想知道 Expression.Reduce() 的作用。 msdn documentation不是很有帮助,因为它只声明它“减少”了表达。为了以防万一,我尝试了一个示例(见下文)来检查此方法是否包含数学归约,但情况似乎并非如此。

有谁知道这个方法的作用,是否可以提供一个简单的例子来展示它的实际应用?有什么好的资源吗?

static void Main(string[] args)
{
    Expression<Func<double, double>> func = x => (x + x + x) + Math.Exp(x + x + x);
    Console.WriteLine(func);
    Expression r_func = func.Reduce();
    Console.WriteLine(r_func); // This prints out the same as Console.WriteLine(func)
}

最佳答案

您需要查看的文件是expr-tree-spec.pdf .

这是表达式树的规范。阅读“2.2 可缩减节点”和“4.3.5 缩减方法”部分。

基本上,此方法适用于将动态语言实现或移植到 .NET 的人员。这样他们就可以创建自己的节点,这些节点可以“减少”为标准表达式树节点并可以编译。表达式树 API 中有一些“可简化”节点,但我不知道您是否可以获得任何实际示例(因为所有标准表达式节点都可以编译,作为最终用户,您可能不关心它们是否被“简化” “是否在幕后)。

是的,MSDN 文档在这方面非常基础,因为语言实现者的信息和文档的主要来源是 GitHub , 以及 its own subfolder 中的文档.

关于c# - Expression.Reduce() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2038759/

相关文章:

c# - 哪个提供更快的字符串操作 : StringBuilder vs. String

c++ - lambda 捕获的对 std::cout 的本地引用而不要求它

scala - lambda () => 1 是否会在每次作为参数传递时在运行时创建对象?

c# - 使用 linq 检查列表计数是否一致

c# - DDD 值对象相等,== 与 .Equals()

c# - Outlook 2007 加载项 : How to add an icon to an msoControlButton

c# - 调整图像大小,同时保持纵横比

c# - MVC3 asp.net 错误 : Value cannot be null. 参数名称:下拉列表中的项目

c# - Directory.GetFiles 只获取今天的文件

.net - 如何创建一个行为类似于 AppSettings 部分的自定义部分?