2013-04-16 1 views
0

매우 복잡 할 수있는 표현식 트리에서 특정 메소드에 대한 모든 호출을 찾아야합니다. 현재 BinaryExpression, ConditionalExpression 등을 확인하고 MethodCallExpression을 검사하는 간단한 재귀 코드가 있습니다. 작동하지만 더 간단한 방법이 있는지 궁금합니다.표현식 트리/반복 표현식 트리에서 메소드 호출 찾기

내가 필요한 것은 복잡한 식의 모든 MethodCallExpression에 대한 반복자이므로 MethodCallExpression을 확인하고 트리의 다른 유형의 표현에 신경 쓰지 않아도됩니다. 예를 들어 System.Linq.Expressions 어딘가에 내장 된 것입니까?

+1

예를 들어 보겠습니다. – Hogan

답변

3

으로 svick 정확하게 지적한다 : http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx

당신이 자신의 롤 또는 ExpressionVisitor이 문서 매트 워렌에, 어떻게 작동하는지보고 싶다면

방법을 다시 하는 방법을 보여줍니다 다음 ExpressionVisitor 기본 클래스를 사용 모든 노드를 방문하여 표현식 트리.

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

그것을를 재 구축에 필요하지 않은, 당신은 단지 검색을해야합니다. Matt의 코드를 수정하여 새 재 작성된 표현식을 반환하지 않고 재귀 적으로 각 하위 노드를 검색합니다.

+2

프레임 워크에 이미 포함되어있는 기본 클래스 인 ['ExpressionVisitor'] (http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx)를 사용하십시오. – svick

+0

@svick : 좋은 점, 나는 그것을 포함하기 시작했음을 잊어 버렸다. –