【发布时间】:2014-12-16 13:37:02
【问题描述】:
System.Linq.Expressions.ExpressionVisitor 有一个名为VisitExtension 的方法,除了在被访问的Expression 上调用VisitChildren 方法外,它似乎什么也不做。
protected internal virtual Expression VisitExtension(Expression node)
{
return node.VisitChildren(this);
}
我了解VisitChildren 的作用。我也明白这个虚拟实现可以并且可能意味着被覆盖。所以我从documentation of the method on MSDN收集起来,字里行间,简单评论:
访问扩展表达式的子级。 这可以被覆盖以访问或重写特定的扩展节点。 如果它没有被覆盖,这个方法将调用 VisitChildren,这让节点有机会遍历它的子节点。默认情况下,VisitChildren 会尝试减少节点。
我觉得这个解释没有帮助。具体来说,让我无法理解的短语是“或重写特定的扩展节点。”
我理解其余部分,这与将表达式简化或分解为子表达式有关。
在同一个命名空间中还有一个名为ExpressionType 的枚举,我非常了解它的用途。但在其所有成员中,有一个名为 Extension 的成员无法映射到我目前知道的任何语法标记。
documentation in this instance 也简洁得令人沮丧。它描述了Extension的值如下:
扩展表达式。
很明显,ExpressionType.Extension 和 ExpressionVisitor.VisitExtension 这两个是相关的。
但是什么是扩展?当然,正如显而易见的那样,扩展方法在这种情况下没有地位。 extension 表达式在这里指的是哪个语法工件?
【问题讨论】:
-
谢谢你,杰罗恩。从 URL 的读取方式来看,它似乎可以很好地回答我的问题。但是,我无法打开它。事实上,在相当长的一段时间内,可能是几个月,我一直无法打开 re-motion 项目的网站。去年早些时候我可以打开它。
-
对于任何感兴趣的人,@JeroenMostert 提供的链接的最后一个 Internet 存档版本是 web.archive.org/web/20131013021401/https://www.re-motion.org/…
标签: c# .net linq expression-trees expressionvisitor