1

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

/* PropertyInfo.SetValue(object obj, object val, object[] index) */

propertyInfo.SetValue(obj, val, null) 

两者objval都是引用类型,但问题是我希望在值obj's property更改时val更改值。但不幸的是,这并没有发生。有什么办法可以实现我想做的事情。

问候

乌迈尔

4

1 回答 1

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";

在这里,您现在有两个实例,一个由属性引用,一个由变量引用。没有办法让属性自动获取该新实例,因此您需要找到一种不同的方法来执行此操作。

于 2011-05-22T21:53:30.647 回答