【发布时间】:2011-09-01 20:13:24
【问题描述】:
我有一个关于解析表达式树的基本问题。
使用 if 语句来确定表达式的 NodeType 并相应地处理它与分派表达式执行不同的访问者方法之间有区别吗?
这也是正确的调度方式:
protected override Expression VisitMember(MemberExpression m)
{
if (m.Expression.NodeType == ExpressionType.Constant)
{
Expression e = (m.Expression as ConstantExpression);
this.Visit(e); // dispatches to VisitConstant() ?
}
}
对比:
protected override Expression VisitMember(MemberExpression m)
{
if (m.Expression.NodeType == ExpressionType.Constant)
{
//specific code to handle constant
}
}
顺便说一下,这是指解析以下内容:
dbContext.Products.Where(x => x.ID == user.ProductID).AsEnumerable()
// user.FooID is 'MemberExpression'
NodeType 和简单的表达式类型之间究竟是什么关系?例如,我注意到有些 NodeTypes 似乎没有可覆盖的访问者方法,对吗?
【问题讨论】:
-
第一个版本可能是正确的(取决于访问者的其余部分),但不需要演员表。
标签: c# .net linq expression expression-trees