我遇到了一个非常奇怪的问题。我正在尝试设置特定对象的属性,通过以下方式为其分配另一个项目的值
/* PropertyInfo.SetValue(object obj, object val, object[] index) */
propertyInfo.SetValue(obj, val, null)
obj
和 val
都是引用类型,但问题是我希望当 obj's property
的值发生变化时val
的值会发生变化。但不幸的是,这并没有发生。有什么方法可以实现我想做的事情。
问候
乌迈尔
好吧,首先,如果您希望属性在您更改传入的变量的内容时自动更改,那么不,这不会发生,您将不得不再次调用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";
在这里,您现在有两个实例,一个由属性引用,另一个由变量引用。无法使属性自动获取该新实例,因此您需要找到一种不同的方法来执行此操作。