web-dev-qa-db-ja.com

C#動的にプロパティを設定

可能性のある複製:
。Net-Reflection set object property
文字列値を使用したリフレクションによるプロパティの設定

複数のプロパティを持つオブジェクトがあります。オブジェクト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);

質問が十分に具体化されることを願っています。詳細が必要な場合はお知らせください。

すべての答えをありがとう!

29
David Archer

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

53
josejuan

これを行うには 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);
    }
}
35
James

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); 
} 
3
Ekk

リフレクションを介してそれを行うことができます:

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});
}

注:読みやすくするため、エラー処理は意図的に省略されています。

1
Sean

最初にプロパティ情報を取得してから、プロパティに値を設定します。

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