2010-08-31 13 views
2

假設我有一個List<Stuff> listA,其中包含一些項目。我創建第二個列表如下:如果我從現有列表創建新列表<T>,那麼這些成員是否相等?

List<Stuff> listB = new List<Stuff>(listA); 

比方說,我有一個項目從listA,我嘗試從listB刪除:

假設Stuff是一個類,應該把該項目已成功從listB中刪除?換句話說,成員是相同的對象還是創建新列表的過程克隆了這些項目?

我遇到了一些代碼中的行爲,我正在調試.Remove未能從listB中刪除該項目。

回答

11

List<T> Constructor (IEnumerable<T>)不克隆項目。

對於值類型,複製該值,對於引用類型,將對同一對象的引用添加到列表中。

List<object> listA = new List<object>(); 
listA.Add(new object()); 

List<object> listB = new List<object>(listA); 
bool result = object.ReferenceEquals(listA[0], listB[0]); 

// result == true 
+0

除非T是一個結構體,其中的值被複制,沒有被引用。 – codekaizen 2010-08-31 16:43:33

+0

非常感謝,這也是我的想法。幕後必須有其他一些代碼,導致.Remove失敗,然後歡呼! – jerry 2010-08-31 16:43:46

+0

codekaizen - 是的,我也懷疑,但檢查和它的課。也謝謝 – jerry 2010-08-31 16:44:20

相關問題