C# 重置属性

C# 重置属性,c#,reference,clone,C#,Reference,Clone,我正在为一个不可序列化的对象编写克隆函数。对于大多数对象,我不在乎它们是否被浅层复制,因为我不会对它们进行任何更改 我从MemberwiseClone开始,它复制了所有的值和一些对象,比如配置字典,但它们只是指针 EAVEntity newClone = (EAVEntity) this.MemberwiseClone(); newClone.EntityStorageID = Guid.NewGuid(); newClone.Controls.Clear(); 那么,如何重置指针,使其不指向

我正在为一个不可序列化的对象编写克隆函数。对于大多数对象,我不在乎它们是否被浅层复制,因为我不会对它们进行任何更改

我从MemberwiseClone开始,它复制了所有的值和一些对象,比如配置字典,但它们只是指针

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

那么,如何重置指针,使其不指向同一位置呢?

准确地说,您使用的不是真正意义上的“指针”,而是作为引用类型的
对象。差别很大

如果希望复制对象的属性不指向相同的其他对象,可以将其设置为
null
,即新对象或任何其他对象:

newClone.SomeProperty = null;

newClone.SomeProperty = new WhatEverTypeSomePropertyIs();

我用newClone.EntityStorageID=new Guid()尝试了这一点,但它仍然会更新this.EntityStorageID。我将尝试null。Nope null(newClone.EntityStorageID=null;)由于是不可为null的类型,因此无法删除。我的解决方案可能是手动完成整个克隆(一次一个属性),但我仍然好奇如何通过引用设置对象。如果将GUID设置为GUID类型?(在VB中可为null),这将允许您传递null。GUID是一种值类型,而可为null的类型、字符串和类是引用类型,它们将遇到您正在讨论的问题。因此,您可以创建一个可为null的类或具有GUID属性的包装类。您可以始终使用默认值(Type),将为int返回0,为objects返回null,等等。