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



我遇到了一个非常奇怪的问题。我正在尝试设置特定对象的属性,通过以下方式为其分配另一个项目的值

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

objval 都是引用类型,但问题是我希望当 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";

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

相关内容

  • 没有找到相关文章

最新更新