我有一个枚举类型
是否还有其他简单克隆
C# 代码:
Fruit
和一个继承于 Collection<Fruit>
的类 FruitCollection
。我在 .NET 中找不到克隆 FruitCollection
的方法,于是我在 这篇 MSDN 文章 中找到了定义 DeepClone()
函数并使用 MemberwiseClone()
的方法。由于这是一个枚举类型,我认为不需要进行“深度”克隆,所以我认为 MemberwiseClone()
是足够的。然而,在 PowerShell 中尝试时,克隆出来的对象似乎只是原始对象的指针而不是副本。我做错了什么?是否还有其他简单克隆
Collection
的方法?FruitCollection
没有其他自定义成员。C# 代码:
public enum Fruit
{
Apple = 1,
Orange = 2
}
public class FruitCollection : Collection<Fruit>
{
public FruitCollection Clone()
{
return Clone(this);
}
public static FruitCollection Clone(FruitCollection fruitCollection)
{
return (FruitCollection)fruitCollection.MemberwiseClone();
}
}
PowerShell输出:
PS> $basket1 = New-Object TestLibrary.FruitCollection
PS> $basket1.Add([TestLibrary.Fruit]::Apple)
PS> $basket2 = $basket1.Clone()
PS> $basket1.Add([TestLibrary.Fruit]::Orange)
PS> $basket2
Apple
Orange
object.MemberwiseClone()
(受保护的)。 - Matthew Watsonobject.MemberwiseClone()
不会克隆集合的内容。它只会复制对象的字段 - 在这种情况下,其中一个字段将是一个数组(或其他引用集合类型),并且只有引用被复制。 - Matthew WatsonCollection<T>
没有另一个Collection<T>
或IEnumerable<T>
的拷贝构造函数?这很奇怪。 - SimpleVarnew Collection<Fruit>(fruitCollection)
是合法的,但返回一个Collection<Fruit>
对象,C# 不想将Collection<Fruit>
转换为FruitCollection
,即使FruitCollection
派生自Collection<Fruit>
。 - Hossy