我需要在表达式树中找到对特定方法的所有调用,这可能非常复杂。 目前我有简单的递归代码,它检查BinaryExpression,ConditionalExpression等,当然还有MethodCallExpression。 它有效,但我想知道是否有更简单的方法?

我需要的是复杂表达式中所有MethodCallExpression的迭代器,所以我可以检查MethodCallExpression而不关心我树中的其他类型的表达式。 是这样的内置例如在System.Linq.Expressions中的某处?

===============>>#1 票数:3 已采纳

正如svick正确指出:使用ExpressionVisitor基类:

http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx

如果您想自己动手或看看ExpressionVisitor的工作原理,在本文中,Matt Warren将向您展示如何通过访问每个节点来重建表达式树。

http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx

您不需要重建它,只需要搜索它。 您可以修改Matt的代码,使其不返回新的重建表达式,它只是递归搜索每个子节点。

  ask by Pol translate from so

未解决问题?本站智能推荐: