【问题标题】:Finding method call in expression tree / iterating expression tree在表达式树/迭代表达式树中查找方法调用
【发布时间】:2013-04-16 00:11:19
【问题描述】:

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

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

【问题讨论】:

  • 向我们展示您现在拥有的示例。

标签: c# .net linq expression-trees


【解决方案1】:

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

【讨论】:

  • 或者只使用框架中已经包含的基类:ExpressionVisitor
  • @svick:好点,我忘了我们开始包括那个了。
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多