我遇到了一个非常奇怪的问题。我试图设置一个特定对象的属性,通过
为其分配另一个项目的值/* PropertyInfo.SetValue(object obj, object val, object[] index) */
propertyInfo.SetValue(obj, val, null)
obj
和val
都是引用类型,但问题是当obj's property
的值发生变化时,我希望val
的值发生变化。但不幸的是,这不会发生。
有没有办法实现我想做的事。
此致
Umair
答案 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";
现在,您有两个实例,一个由属性引用,另一个由变量引用。没有办法让属性自动获取新实例,所以你需要找到一种不同的方法来实现这一点。