2011-05-22 143 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"; 

在這裏,你現在有兩個例子,一個酒店所引用,一個由變量。無法使屬性自動獲取新實例,因此您需要找到一種不同的方式來執行此操作。

相關問題