I am using the ExpressionVisitor
to parse an expression tree to find out if it contains a specified parameter. Once I have found the parameter, there is no point in continuing the traversal.
Is there any way to stop the traversal with the visitor pattern in general and more specifically with the ExpressionVisitor
in .NET?
This is what I have so far, and it is working as expected. But once the boolean flag is set to true it would make sense to stop the traversal as far as this algorithm goes.
public class ExpressionContainsParameterVisitor : ExpressionVisitor
{
private bool expressionContainsParameter_;
private ParameterExpression parameter_;
public bool Parse(Expression expression, ParameterExpression parameterExpression)
{
parameter_ = parameterExpression;
expressionContainsParameter_ = false;
Visit(expression);
return expressionContainsParameter_;
}
protected override Expression VisitParameter(ParameterExpression node)
{
if (node == parameter_)
{
expressionContainsParameter_ = true;
}
return node;
}
}