У меня есть основной вопрос о разборе деревьев выражений.
Есть ли разница между использованием операторов if для определения типа NodeType выражения и его соответствующей обработкой по сравнению с отправкой выражения для другого метода Visitor?
Также это правильный способ отправки:
protected override Expression VisitMember(MemberExpression m)
{
if (m.Expression.NodeType == ExpressionType.Constant)
{
Expression e = (m.Expression as ConstantExpression);
this.Visit(e); // dispatches to VisitConstant() ?
}
}
Versus:
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, которые, кажется, не имеют переопределенных методов посетителя, это правильно?