PropertyInfo.SetValue(object obj,object val,object [] index)属性值在更改“object val”时不会更改

时间:2011-05-22 21:49:39

标签: c# reflection propertyinfo setvalue

我遇到了一个非常奇怪的问题。我试图设置一个特定对象的属性,通过

为其分配另一个项目的值
/* PropertyInfo.SetValue(object obj, object val, object[] index) */

propertyInfo.SetValue(obj, val, null) 

objval都是引用类型,但问题是当obj's property的值发生变化时,我希望val的值发生变化。但不幸的是,这不会发生。 有没有办法实现我想做的事。

此致

Umair

1 个答案:

答案 0 :(得分:1)

嗯,首先,如果你想要在你改变传入的变量的内容时自动更改属性,那么不,那不会发生,你将不得不打电话SetValue或类似的代码。

另一方面,如果您没有替换实例,而是修改实例的内容,那么应该发生这种情况。

换句话说,这将有效:

TestClass val = new TestClass();
val.Name = "Before";
propertyInfo.SetValue(obj, val, null);
val.Name = "After";

你没有制作实例的副本,你只是分享它的引用,所以通过变量val和相关属性都可以观察到变化。

然而,这不起作用:

TestClass val = new TestClass();
val.Name = "Before";
propertyInfo.SetValue(obj, val, null);
val = new TestClass();
val.Name = "After";

现在,您有两个实例,一个由属性引用,另一个由变量引用。没有办法让属性自动获取新实例,所以你需要找到一种不同的方法来实现这一点。