48

重複の可能性:
.Net - リフレクション セット オブジェクト プロパティ
文字列値を使用したリフレクションによるプロパティの設定

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

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

答えてくれてありがとう!

4

5 に答える 5

79

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

于 2012-10-19T08:41:15.307 に答える
44

リフレクションを使用してこれを行うことができます。

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);
    }
}
于 2012-10-19T08:38:08.253 に答える
4

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); 
} 
于 2012-10-19T08:43:12.480 に答える
4

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

PropertyInfo propertyInfo = objName.GetType().GetProperty(propertyName);
propertyInfo.SetValue(objName, value, null);
于 2012-10-19T08:41:34.993 に答える
2

あなたは反射を介してそれを行うことができます:

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

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

于 2012-10-19T08:44:43.053 に答える