2010-01-20 62 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