所以我需要一個深度克隆的方法。我想要一張卡片清單等於另一張卡片清單,但是我還想修改其中一個克隆。列表有沒有更好的深層克隆方法?
我做了一個方法來複制列表如下:
public List<Card> Copy(List<Card> cards)
{
List<Card> clone = new List<Card>();
foreach (var card in cards)
{
clone.Add(card);
}
return clone;
}
,並使用它像這樣:
_cards = new List<Card>();
_thrownCards = new List<Card>();
_cards = Copy(_thrownCards);
_thrownCards.Clear();
我不是在C#中經驗豐富,但不知何故,我的直覺告訴我,我的複製方法可以變得更簡單。沒有其他方法可以深入複製列表嗎?我嘗試使用MemberWiseClone,但它只是創建對同一個對象的引用,而不是克隆它(也許我錯誤地解釋了MemberWiseClone方法)。
有沒有人有任何提示如何簡單地克隆一個列表對象?
您可以克隆用'名單cards.ToList()'但如果'Card'是引用類型,則需要克隆每個列表元素以獲得深層副本。 – Lee
你的方法不是深度克隆,因爲所有'Card'實例都沒有被克隆,只是被複制到另一個列表中(假設它們不是結構體)。 – Evk
我只想指出,由於您的複製函數創建並返回'新列表()',您實際上並不需要首先初始化_cards。你可以像這樣使用你的函數:'_thrownCards = new List (); ...; _cards =複製(_thrownCards); _thrownCards.Clear();'另外,你在Copy函數中實際做的是一個淺層克隆。這裏有一個[Stackoverflow的問題](https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy)關於兩者之間的區別。 –
ashbygeek