我有一個List<int>
會員。如果我想克隆此類的實例,是否需要深層副本或MemberwiseClone()
淺拷貝就足夠了?C# - 列表成員需要深度複製嗎?
如果至少有一個成員是對象的引用,那麼我們需要一個深層副本,對吧?這是否意味着有List,DateTime,String,MyClass,...需要一個深層副本?
我有一個List<int>
會員。如果我想克隆此類的實例,是否需要深層副本或MemberwiseClone()
淺拷貝就足夠了?C# - 列表成員需要深度複製嗎?
如果至少有一個成員是對象的引用,那麼我們需要一個深層副本,對吧?這是否意味着有List,DateTime,String,MyClass,...需要一個深層副本?
這完全取決於您打算如何使用副本。
如果你做一個淺拷貝像
List<int> x = new List<int>() { 1, 2, 3, 4, 5 };
List<int> y = x;
y[2] = 4;
然後x將包含{1,2,4,4,5}
如果你做的列表的深層副本:
List<int> x = new List<int> { 1, 2, 3, 4, 5 };
List<int> y = new List<int>(x);
y[2] = 4;
那麼x將包含{1,2,3,4,5}和y將包含{1,2,4,4,5}
你如何在用c計劃opy確實決定你是使用淺拷貝還是深拷貝。
如果你有List<int> originalList = new List{1, 2}
那麼這樣做:
List<int> newList = new List<int>();
foreach(int i in originalList)
newList.Add(i);
將讓你一個克隆列表。
但是,如果您嘗試了我在上面用某種引用類型的List泛型所做的操作,那麼您將不會成功。在更改列表中的某個對象之後,無論是從原始列表還是新列表中引用該對象,都會看到更改後的版本。
簡短的回答,是的。
很長的答案,您需要確定您的案例中的副本實際上對列表意味着什麼。你還需要列表的內容的副本嗎?對於像int這樣的值類型,它的相當簡單,如果它是參考類型,儘管....有一些問題要問你想要列表包含什麼。
您是否試圖複製列表或列表中的對象?請編輯你的問題來澄清。 –
你在做什麼克隆? –