我遇到了一个非常奇怪的问题。我正在尝试设置特定对象的属性,通过
/* PropertyInfo.SetValue(object obj, object val, object[] index) */
propertyInfo.SetValue(obj, val, null)
两者obj
和val
都是引用类型,但问题是我希望在值obj's property
更改时val
更改值。但不幸的是,这并没有发生。有什么办法可以实现我想做的事情。
问候
乌迈尔
我遇到了一个非常奇怪的问题。我正在尝试设置特定对象的属性,通过
/* 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";
在这里,您现在有两个实例,一个由属性引用,一个由变量引用。没有办法让属性自动获取该新实例,因此您需要找到一种不同的方法来执行此操作。