2012-02-15 1 views
0

Dynamic.cs를 확장하여 인덱서 사용에 적합하게합니다. 이 시나리오에서는 호출 식에 저장된 인덱스를 가져와야합니다. 디버거, 나는 볼 수linq 호출에 저장된 값을 얻는 방법 Expression

-  left {Param_0.get_Item(0)} System.Linq.Expressions.Expression {System.Linq.Expressions.InstanceMethodCallExpressionN} 
    - Arguments Count = 1 System.Collections.ObjectModel.ReadOnlyCollection<System.Linq.Expressions.Expression> {System.Runtime.CompilerServices.TrueReadOnlyCollection<System.Linq.Expressions.Expression>} 
     - [0] {0} System.Linq.Expressions.Expression {System.Linq.Expressions.ConstantExpression} 
      CanReduce false bool 
      DebugView "0" string 
      NodeType Constant System.Linq.Expressions.ExpressionType 
      + Type {Name = "Int32" FullName = "System.Int32"} System.Type {System.RuntimeType} 
      Value 0 object {int} 
    + Rohdatenansicht  

내가 원하는입니다 :

left.Arguments[0].Value 

이걸 어떻게 얻을 수?

추한 방법은 아마도 left.ToString()을 사용하는 것입니다. 결과는 다음과 같습니다. "Param_0.get_Item (0)"여기서 get_Item() 매개 변수를 추출 할 수 있습니다. 그러나 이것이 올바른 방법이 아니라고 생각합니다.

+0

입니까? – svick

+0

@svick Google을 알고 계십니까?). 그렇지 않다면 [link] (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library. aspx) – Schorsch

답변

2

그 값을 얻으려면, 당신은 단지 올바른 유형의 표현을 캐스팅해야합니다

Expression left = … 

var methodCall = (MethodCallExpression)left; 

var constant = (ConstantExpression)methodCall.Arguments[0]; 

int value = (int)constant.Value; 

다른 방법으로, dynamic를 사용할 수 있습니다 Dynamic.cs은 무엇

dynamic dynamicLeft = left; 

int value = dynamicLeft.Arguments[0].Value;