如何使用反射动态设置对象实例的属性值?

时间:2012-10-26 07:43:44

标签: c#

给出基本的类定义:

using System.Reflection;

public class Car()
{
  public int speed {get;set;}

  public void setSpeed()
  {
       Type type = this.GetType(); 
       PropertyInfo property = type.GetProperty(PropertyName );
       property.SetValue(type, Convert.ToInt32(PropertyValue), null);
  }
}

此代码示例已简化,未使用动态类型转换,我只想要一个工作示例在实例上设置该属性。

编辑:上面代码中的PropertyName和PropertyValue也得到了简化。

提前致谢

1 个答案:

答案 0 :(得分:8)

您传递的第一个参数应该是包含您要设置的属性的实例。如果它是静态属性,则为第一个参数传递null。在您的情况下,将代码更改为:

  public void setSpeed()
  {
       Type type = this.GetType(); 
       PropertyInfo property = type.GetProperty(PropertyName );
       property.SetValue(this, Convert.ToInt32(PropertyValue), null);
  }

你可以做一个天真的类型转换

   var value = Convert.ChangeType(PropertyValue,property.PropertyType);
   property.SetValue(this, value, null);