2010-12-05 48 views

回答

6

沒有,第二表不是隻讀的,它仍然從IEnumerable<T>(具體爲ICollection<T>這裏)生成的列表。 .AsReadOnly()方法只是給出了一個ReadOnlyCollection<MyObject>,但我們並沒有修改那個集合時弄亂了第二個列表。

相反,你已經創建了一個新的List<MyObject>其成員編輯(通過List<T>(IEnumerable<T>)構造函數)。這代表像任何其他IEnumerable<T>源代碼那樣是ICollection<T>,它在下面執行.CopyTo()

ReadOnlyCollection<T>的,它調用原始IList<T>下,這是從.CopyTo()的情況下(實現ICollection<T>),所以基本上你有什麼是一樣的:

List<MyObject> FirstList = new List<MyObject>(); 
// Add items to FirstList. 
List<MyObject> SecondList = new List<MyObject>(FirstList); 

....就第二份名單而言。在其他情況下,傳遞給構造函數的IEnumerable<T>而不是 a ICollection<T>,它將遍歷集合和每個成員.Add(),但它仍然不會影響新列表及其成員的可變性。

相關問題