反射

2012-04-26 17 views
37

を使用してプロパティ値を取得する方法私は、次のコードを持っている:反射

FieldInfo[] fieldInfos; 
fieldInfos = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 

私は何をしようとしていることはリフレクションを使用して、実行時に現在のインスタンス化インスタンスの私の性質の1つの値を取得することです。これどうやってするの?

+1

、フィールドでは見ていません。 http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx –

+3

[C#でリフレクションを使用して文字列からプロパティ値を取得]の可能な複製(http://stackoverflow.com/questions/1196991/get-property -value-from-string-using-c-sharp-in-c-sharp) –

+0

@JacobKrall - コンパイラがプロパティを実装するバッキングフィールドを実際に作成すると思う自動プロパティ。 – Icemanind

答えて

82

何か作業をする必要があります:あなたはプロパティをしたい場合

var value = (string)GetType().GetProperty("SomeProperty").GetValue(this, null); 
21

GetPropertiesメソッドを試すと、フィールドの代わりにプロパティが表示されます。これはちょうど1 PropertyInfoオブジェクトではなく、それらの配列を返すGetPropertyメソッドを使用している

object foo = ...; 
object propertyValue = foo.GetType().GetProperty("PropertyName").GetValue(foo, null); 

が値を取得するには、このような何かを行います。次にGetValueを呼び出します。このGetValueはオブジェクトのパラメータを取得して値を取得します(PropertyInfoはインスタンスではなくその型に固有です)。 GetValueの2番目のパラメータはインデックスプロパティのインデクサの配列です。興味のあるプロパティがインデックス付きプロパティではないと仮定しています。 (インデックス付きプロパティを使用すると、リストの14番目の要素を取得するために list[14]を行うことができますものです。)このような

+0

I OPは特に1つのプロパティに興味があり、その関数だけでは価値が得られないと考えています。 –