C# ExpressionVisitor.VisitBinary
От: Как: изменить деревья выражений (C# и Visual Basic)
http://msdn.microsoft.com/en-us/library/bb546136.aspx
protected override Expression VisitBinary(BinaryExpression b)
{
if (b.NodeType == ExpressionType.AndAlso)
{
Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);
// Make this binary expression an OrElse operation instead of an AndAlso operation.
return Expression.MakeBinary(ExpressionType.OrElse, left, right, b.IsLiftedToNull, b.Method);
}
return base.VisitBinary(b);
}
Исправьте меня, если я не прав насчет цели этого метода и как он работает. Спасибо.
Если у меня есть существующий эксперимент, посетитель Expresstion будет отправлять каждое BinaryExpression этому методу, так что эти две строки, насколько я понимаю, являются пустой тратой:
Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);
Поскольку эти две строки делают одно и то же, они будут отвечать за каждое BinaryExpression, которое будет отправлено этому методу. Я прав?
Цель Expression.MakeBinary - обновить BinaryExpression до нового. Так почему бы не использовать этот метод: b.Update??
и, наконец, собирается ли этот метод заменить каждое AndAlso в OrElse в этом выражении?
спасибо за ваше время заранее.