如何设置存储为对象的反射属性值?

时间:2018-02-16 23:00:59

标签: c# oop recursion reflection propertyinfo

我想设置一个反射对象的属性值,但我不能引用该对象本身。我将该属性存储为System.object - 这就是全部。

class Painting
{
   public System.Color PaintingColor;
   {
       get { return m_color; }
       set { m_color = value; }
   }
}

基于示例 - 我有一个System.Color类型的对象,它实际上是我通过反射创建的Painting的属性值。我想这样做:

object pnt = //initialized with Activator.CreateInstance
pnt.GetType().GetProperty("PaintingColor").SetValue(pnt, Color.Black);

然而,由于我使用的递归,我只有:

object clr = pnt.GetType().GetProperty("PaintingColor").GetValue();

无法访问pnt。是否可以更改clr,以便它实际更改pnt的属性值?显然,clr = Color.Black无效。

1 个答案:

答案 0 :(得分:0)

您在代码中获得的只是该属性的实际值;不是您可以用来实际分配它的引用或指针。

如果您获得的值是可变的,那么您可以更改该对象上的属性 并且它会传播,但这并不适用于System.Color

如果您确实需要这样做,我建议将属性更改为System.Color周围的包装,以便您可以更改内部变量。一般来说,这样做的必要性表明你可能做得不对。