我以前經常使用Lotus Domino平台及其LotusScript語言。這門語言中我最喜歡的一個特性是List對象;它會簡化使用相同對象的集合。後來我發現.NET架構2.0語言裡也有一個類似(甚至更加強大)的特性。
範型
.NET架構2.0引入了一個叫做範型(generics)的重要概念。雖然範型常常都是用C#語言來討論的,但是它事實上是.NET中繼語言(Intermediate Language,IL)裡的一個重要特性,所以它在所有的.NET語言裡都有。.NET是類別安全語言,所以編譯器會檢查變數分配是否合法,如果有問題它就會提示你。
型別安全特性在使用集合對象的.NET 1.1裡消失了,因為集合可以容納一切東西。在訪問單獨的集合元素時,你必須把它們歸為正確的類型——這就是範型的作用。使用範型的集合會保留集合的一般性質,但是在被執行個體化的時候,通過為集合定義物件類型,型別安全被加入。
System.Collections.Generic命名空間含有用來定義範型集合的介面和類,它可以讓你建立強型別集合。反過來,它們提供了比非範型強型別集合更好的類型和效能。我們將把注意力放到這樣一個集合上——List。
List類
你可以使用System.Collections.Generic.List類來表示一個可以通過索引來訪問的強型別對象的列表。這個類為搜尋、排序和操控列表的內容提供了方法。微軟的文檔將List類描述為與ArrayList類對應的範型。它包括下列方法:
- Add:允許向List的結尾添加對象。
- AddRange:將一個集合的內容添加到List的結尾。
- BinarySearch:使用二進位搜尋演算法在被排序的List裡或者其中的一部分裡尋找某個元素。
- Clear:清除List裡的內容(也就是說,刪除所有的東西)。
- Contains:確定List裡是否含有某個元素。
- ConvertAll:把所有的List元素轉換成為另外一種類型。
- CopyTo:把List裡的所有內容複寫到另外一個數組裡。
- Exists:確定List裡是否含有合格元素。
- Find:搜尋符合特定的條件的元素。
- FindAll:搜尋符合某些條件的所有元素。
- FindIndex:搜尋合格元素索引。
- FindLast:搜尋符合特定條件的元素最後一次出現的地方。
- FindLastIndex:搜尋符合特定條件的元素最後一次出現的地方,並返回其索引。
- ForEach:對每個List項目採取某個動作。
- GetEnumerator:返回一個在List裡迭代的計數器。
- GetRange:返回List裡元素的子集。
- IndexOf:返回符合某個值的元素的第一個索引。
- LastIndexOf:返回符合某個值的元素的最後一個索引。
- Remove:從List裡刪掉某個元素第一次的出現。
- RemoveAll:從List裡刪除合格所有元素。
- RemoveAt:用某個索引從List裡刪除元素。
- RemoveRange:從List裡刪除元素組。
- Reverse:顛倒List元素的順序。
- Sort:利用索引值給List元素排序。
這個列表雖然沒有列出所有的方法,但是它概要說明了List類提供的各種功能。此外,還有其他一些可用的屬性,包括計算(List中項目的數量)和容量(也就是在不需要調整大小的情況下List能夠容納的項目數量)。