我需要在表达式树中找到对特定方法的所有调用,这可能非常复杂。目前我有简单的递归代码,它检查BinaryExpression,ConditionalExpression等,当然还有MethodCallExpression。它有效,但我想知道是否有更简单的方法?
我需要的是复杂表达式中所有MethodCallExpression的迭代器,所以我可以检查MethodCallExpression而不关心我树中的其他类型的表达式。是这样的内置例如在System.Linq.Expressions吗?
答案 0 :(得分: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的代码,使其不返回新的重建表达式,只是递归搜索每个子节点。