c# – 使用ExpressionVisitor停止遍历
发布时间:2020-12-15 23:32:39 所属栏目:百科 来源:网络整理
导读:我正在使用ExpressionVisitor来解析表达式树,以确定它是否包含指定的参数.一旦找到参数,继续遍历是没有意义的. 是否有任何方法可以通过访问者模式停止遍历,更具体地说,使用.NET中的ExpressionVisitor? 这是我到目前为止所做的,它正如预期的那样工作.但是一
我正在使用ExpressionVisitor来解析表达式树,以确定它是否包含指定的参数.一旦找到参数,继续遍历是没有意义的.
是否有任何方法可以通过访问者模式停止遍历,更具体地说,使用.NET中的ExpressionVisitor? 这是我到目前为止所做的,它正如预期的那样工作.但是一旦布尔标志设置为true,就此算法而言,停止遍历是有意义的. 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; } } 解决方法
我认为您可以做的最好的事情是覆盖
Visit 方法,以便在设置标志后停止调度.
有点像: public override Expression Visit(Expression node) { if(expressionContainsParameter_) return node; return base.Visit(node); } 这应该允许遍历尽可能快地“展开”,即使您当前嵌套了多个深度访问呼叫. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |