2012-10-19 18 views
21

可能性の重複:
.Net - Reflection set object property
Setting a property by reflection with a string valueC#の動的に設定されたプロパティ

私はこれを行うための簡単な方法があります確信していると私は厚めのものだけど、私ができます」私の人生のためにそれを理解してください。

私は複数のプロパティを持つオブジェクトを持っています。 objNameというオブジェクトを呼び出しましょう。私は単にオブジェクトを新しいプロパティ値で更新するメソッドを作成しようとしています。

私はこの方法では次の操作を実行できるようにしたい:

private void SetObjectProperty(string propertyName, string value, ref object objName) 
{ 
    //some processing on the rest of the code to make sure we actually want to set this value. 
    objName.propertyName = value 
} 

、最終的には、呼び出し:

SetObjectProperty("nameOfProperty", textBoxValue.Text, ref objName); 

は、質問が十分に肉付けされると思います。詳細が必要な場合はお知らせください。

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

+0

@DavidArcher C言語では 'rel'キーボードはありません。私は' ref'を意味しますか?実際のインスタンスを変更しようとしない限り、オブジェクトを 'ref'として渡す必要はありません。 – James

+0

確かに、私はrefを意味しました。そして、実際のインスタンスを変更するつもりです。 –

答えて

40

objName.GetType().GetProperty("nameOfProperty").SetValue(objName, objValue, null)

+1

'GetProperty()'の中で 'propertyName'を使うべきです。 – Anonymous

+0

"* nameOfProperty *"が存在しない場合はどうなりますか? – James

+0

例外として、もちろんGetPropertiesを使ってテストすることができます。 – josejuan

26

Reflectionを使用すると、これを行うことができます。

private void SetObjectProperty(string propertyName, string value, object obj) 
{ 
    PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName); 
    // make sure object has the property we are after 
    if (propertyInfo != null) 
    { 
     propertyInfo.SetValue(obj, value, null); 
    } 
} 
+2

呼び出しの前にヌルをチェックするための小道具。 –

1

最初のプロパティ情報を取得し、その後、プロパティに値を設定します。

PropertyInfo propertyInfo = objName.GetType().GetProperty(propertyName); 
propertyInfo.SetValue(propertyInfo, value, null); 
3

これを行うには、Type.InvokeMemberを使用することができます。

private void SetObjectProperty(string propertyName, string value, rel objName) 
{ 
    objName.GetType().InvokeMember(propertyName, 
     BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, 
     Type.DefaultBinder, objName, value); 
} 
1

あなたはリフレクション経由でそれを行うことができます。

void SetObjectProperty(object theObject, string propertyName, object value) 
{ 
    Type type=theObject.GetType(); 
    var property=type.GetProperty(propertyName); 
    var setter=property.SetMethod(); 
    setter.Invoke(theObject, new ojbject[]{value}); 
} 

注:意図的に読みやすさのために取り残さエラー処理。

関連する問題