1

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

我需要的是复杂表达式中所有 MethodCallExpression 的迭代器,因此我可以只检查 MethodCallExpression 而不必关心树中的其他类型的表达式。例如在 System.Linq.Expressions 中的某个地方有类似这样的内置功能吗?

4

1 回答 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 的代码,使其不返回新的重建表达式,它只是递归搜索每个子节点。

于 2013-04-16T00:26:25.553 回答