Exanding在什麼Rex said,當你調用.ToList()
數組對象,你說的話是,「讓我一個全新的List
對象,它是從原始數組一個不同的參考,但是從我原來的數組作爲使用對象我列表中的對象。「
由於數組的大小是固定的,如果沒有將現有數組複製到具有增加容量的新數組(甚至VB世界中的ReDim Preserve
將數組複製到scense後面),真的沒有辦法將Add()
複製到它。因此,如果在實例化時不知道數組中項目的總數,應該問自己爲什麼使用數組。當你知道物品的數量,或者當你從現有的List
或IEnumerable
實例化陣列時,陣列可以是一個體面的輕量級方法來保存一組對象。但是,如果直到運行時才知道容量,並且源不是IEnumerable
,則List
可能是更好的選擇,因爲它隨着項目的添加而構建爲容量的增長。
我在班級使用下面的集合類型的屬性:
IEnumerable
- 我用
IEnumerable
當我將要遍歷一個已經存在的集合,我不會被添加到它。例如,如果我查詢目錄中的文件,並且希望將這些文件作爲類中的屬性,則可以使用public IEnumerable<FileInfo> DirectoryFiles {get; set;}
。
IEnumerable
允許我通過現有的一組數據進行查詢,但我不一定關心它是什麼集合,只要它實現IEnumerable
即可。
List<T>
- 我使用的是
List<T>
當我需要的是能長或動態收縮的集合,即集合不存在arealdy別的地方,我可能需要從它添加或刪除項目。
- 一個很好的例子是,如果您允許用戶在應用程序的用戶界面中添加項目並將其刪除到列表框中。由於列表框中的項目可能會增大或縮小,因此
List<T>
是有意義的。
ObservableCollection<T>
- 我使用這種類型的集合中的Silverlight/WPF的世界,因爲它有內置的事件時,在收集變化的項目數。當您希望UI元素在列表更改時自動更新時,這對於數據綁定方案尤其方便。
除非我消耗已經有數組對象我幾乎從來不使用數組明確。當然,他們是一個不錯的輕量級商店,但我通常可以通過上面列出的3種類型獲得。
將一個新項目添加到**數組**時,您的預期結果是什麼?在某個(哪個?)索引處使用新項目的數組,取代之前可能存在的任何項目?一個新的,更大的陣列? (從你上次的代碼看起來是這樣) – AakashM 2010-08-12 15:33:15