几天来我一直在研究表达式树,我很想知道 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/