System.Linq.Expressions.ExpressionVisitor
有一个名为VisitExtension
的方法,似乎除了在正在访问的Expression
上调用VisitChildren
方法之外没有任何其他作用。
protected internal virtual Expression VisitExtension(Expression node)
{
return node.VisitChildren(this);
}
我理解
VisitChildren
的作用。我也明白这个虚拟实现可以被重写。从MSDN文档中,我了解到以下信息:访问扩展表达式的子节点。这可以被重写以访问或重写特定的扩展节点。如果没有重写,则此方法将调用VisitChildren,使节点有机会遍历其子节点。默认情况下,VisitChildren将尝试减少节点。
我不认为这说明很清楚。特别是,“或重写特定的扩展节点”这句话让我无法理解。
我理解其余内容,与将表达式分解成子表达式相关。
在同一命名空间中还有一个名为
ExpressionType
的枚举类型,我非常了解其用途。但是,在所有成员中,有一个成员名为Extension
,我无法将其映射到我目前所知道的任何语法标记。在这个文档中,也仅描述了
Extension
的值:扩展表达式。
显然,
ExpressionType.Extension
和ExpressionVisitor.VisitExtension
是相关的。但是什么是扩展?毫无疑问,扩展方法在这种情况下没有任何作用。这里的表达式“扩展”指的是哪个语法结构?