2011-06-23 13 views
2

私は定数式の値を評価しようとしています。デバッガでは、私は値を参照することができます:constantexpressionの値を取得する方法

watch

を私はコードでそれをどのように入手できますか?

表現の形式は次のとおりです。

x => x.ListPropery[5].ChildProperty 

私は、文字列に変換する式を歩いてんだけど、IVEは、イン​​デクサ部に捕まってしまいました。

for(var i = 0; i < list.Count; i++) 
{ 
    var j = i; 
    Expression<Func<IList<TValue>, TValue>> indexer = xs => xs[j]; 

更新:

(exp.Arguments[0] as MemberExpression).Member 

は、インデクサは、私は、このように生成された定数式で取得するには、引数に私のように動作することができ、get_ItemからIList<>MethodCallExpression作成します

MemberInfoを返します。

ありがとうございました!

答えて

3

aha!

(exp.Arguments[0] as MemberExpression).Memberは私が行うことができますFieldInfo

です:

((exp.Arguments[0] as MemberExpression).Member as FieldInfo).GetValue(((exp.Arguments[0] as MemberExpression).Expression as ConstantExpression).Value) 
-3

デバッガで式の名前を右クリックして 'add watch'を選択し、コードに名前をコピーします。

+3

文字通りspeachless ... –

4

また、次を試すことができます。

LambdaExpression lambda = Expression.Lambda(exp.Arguments[0]); 
var val = lambda.Compile().DynamicInvoke(); 
関連する問題