2011-05-22 101 views
1

我遇到了一个非常奇怪的问题。我试图通过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更改。但不幸的是,这不会发生。 有什么办法可以实现我想要做的事情。

问候

Umair

+0

“这不会发生”是什么意思?我没有看到你的代码有明显的问题。 – Iain 2011-05-22 21:54:44

回答

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

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

相关问题