System.Linq.Expressions.ExpressionVisitor
有一个名为的方法,除了调用被访问的方法VisitExtension
外,它似乎什么也不做。VisitChildren
Expression
protected internal virtual Expression VisitExtension(Expression node)
{
return node.VisitChildren(this);
}
我明白它的VisitChildren
作用。我也明白这个虚拟实现可以并且可能意味着被覆盖。因此,我从MSDN 上的方法文档中收集了一些信息,并简要说明了这一点:
访问扩展表达式的子级。这可以被覆盖以访问或重写特定的扩展节点。如果它没有被覆盖,这个方法将调用 VisitChildren,这让节点有机会遍历它的子节点。默认情况下,VisitChildren 将尝试减少节点。
我觉得这个解释没有帮助。具体来说,让我无法理解的短语是“或重写特定的扩展节点”。
我理解它的其余部分,这与将表达式简化或分解为子表达式有关。
在同一个命名空间中还有一个名为 的枚举ExpressionType
,我非常了解它的目的。但是在它的所有成员中,有一个名为Extension
我无法映射到我目前知道的任何语法标记的成员。
本例中的文档也非常简洁。它描述的值Extension
如下:
扩展表达式。
很明显,这两者 -ExpressionType.Extension
和ExpressionVisitor.VisitExtension
- 是相关的。
但是什么是扩展?当然,正如显而易见的那样,扩展方法在这种情况下没有地位。表达式扩展在这里指的是哪个语法工件?