2010-01-20 98 views
1

我正在爲不可序列化的對象寫一個克隆函數。對於大多數對象,我不在乎它們是否被淺拷貝,因爲我不會對它們進行任何更改。C#重置屬性

我從MemberwiseClone開始,它將所有的值和像配置字典這樣的很少的對象複製過來,但它們都是指針。

EAVEntity newClone = (EAVEntity) this.MemberwiseClone(); 
newClone.EntityStorageID = Guid.NewGuid(); 
newClone.Controls.Clear(); 

那麼如何重置一個指針,以便我可以讓它們不指向相同的位置?

回答

1

準確地說,你不是用真正意義上的「指針」,而是用作參考類型的objects。有很大的區別。

如果你希望你的複製對象的屬性不指向同其他對象,你既可以將其設置爲null,一個新的或其他任何對象爲此事:

newClone.SomeProperty = null; 

newClone.SomeProperty = new WhatEverTypeSomePropertyIs(); 
+0

我試過用 newClone.EntityStorageID = new Guid() 但它仍然更新this.EntityStorageID。我會嘗試null。 – Jeff 2010-01-20 20:22:59

+0

Nope null(newClone.EntityStorageID = null;)未能成爲非空類型。我的解決方案可能是手工完成整個克隆(一次一個屬性),但我仍然對如何通過引用設置對象感到好奇。 – Jeff 2010-01-20 20:31:13

+0

如果您將GUID作爲GUID的一種類型? (VB中爲空值),這將允許你傳遞null。 GUID是一個值類型,而可爲空的類型,字符串和類是引用類型,並且會遇到您正在討論的問題。所以你可以創建一個可爲空的類或者具有GUID屬性的包裝類。 – 2010-01-20 20:35:20