2012-12-07 8 views
14

私が解決しようとしている問題は、プロパティ名を文字列として受け取り、そのプロパティに割り当てられた値を返すメソッドを記述する方法です。プロパティ名に動的にアクセスするプロパティ名

私のモデルクラスは次のように宣言されています:

public class Foo 
{ 
    public int FooId 
    public int param1 
    public double param2 
} 

と私の方法の中から、私は、このような表現を使用して、この

var property = GetProperty("param1) 
var property2 = GetProperty("param2") 

私は現在、これを行うにしようとしていますに似た何かをしたいですas

public dynamic GetProperty(string _propertyName) 
    { 
     var currentVariables = m_context.Foo.OrderByDescending(x => x.FooId).FirstOrDefault(); 

     var parameter = Expression.Parameter(typeof(Foo), "Foo"); 
     var property = Expression.Property(parameter, _propertyName); 

     var lambda = Expression.Lambda<Func<GlobalVariableSet, bool>>(parameter); 

    } 

このアプローチは正しいですか?もしそうなら、thダイナミックなタイプですか?

答えは正しく、これをあまりにも複雑にしていました。ソリューションは現在、次のとおりです。

public dynamic GetProperty(string _propertyName) 
{ 
    var currentVariables = m_context.Foo.OrderByDescending(g => g.FooId).FirstOrDefault(); 

    return currentVariables.GetType().GetProperty(_propertyName).GetValue(currentVariables, null); 
} 
+0

System.Reflection.PropertyInfoを使用して、特定のタイプのプロパティの値をルックアップすることができます。 http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx – Chris

答えて

26
public static object ReflectPropertyValue(object source, string property) 
{ 
    return source.GetType().GetProperty(property).GetValue(source, null); 
} 
+0

これは、インデクサーを持つプロパティの例外をスローすると思います。 –

6

あなたはあなたが提供するサンプルに途中船外になるだろう。

お探しの方法:あなたはこのコード6で迷子にバインドされている...

public static object GetPropValue(object target, string propName) 
{ 
    return target.GetType().GetProperty(propName).GetValue(target, null); 
} 

しかし、「VAR」と「ダイナミック」と「表現」と「ラムダ」を使用して今から数ヶ月。それを書く簡単な方法に固執する

関連する問題