在建立列表類時,清單項目的資料類型可能是int、string或其他類型,但不管是什麼類型,如果對列表類的處理方法相同,就沒有必要事先指定資料類型,留待列表類執行個體化時再指定。這相當於把資料類型當成參數,可以最大限度地重用代碼、保護類型的安全以及提高效能。泛型將型別參數(type parameter)的概念引入.NET Framework,通常使用T作為泛型型別參數。ArrayList是非泛型集合類,添加到ArrayList中的任何引用或實值型別都將隱式地向上強制轉換為Object。如果項是實值型別,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行拆箱操作。另一個限制是缺少編譯時間類型檢查,因為ArrayList將把所有項都強制轉換為Object,所以在編譯時間無法防止用戶端代碼將int類型和string同時加入,編譯也能通過,直到運行時才能檢測到錯誤。 泛型最常見的用途是建立集合類。.NET Framework類庫在Collections.Generic命名空間中包含幾個泛型集合類。List<T>類是ArrayList類的泛型等效類。使用大小可按需動態增加的數組實現IList泛型介面。動態數組的好處是不必事先設定較大的數組,減少不必要的記憶體開銷。微軟MSDN的C#編程指南建議使用泛型集合類,如List<T>類,而不要使用非泛型集合類,如ArrayList類,也不要自行建立集合類。原因是不必做.NET Framework已經完成的工作,公用語言運行庫能夠共用Microsoft中繼語言代碼和元素據,這是自己編寫的強型別所無法做到的。下面舉例說明List<T>的用法。public class Student //學生類作為資料來源{ public string Name { get; set; } public List<int> Scores { get; set; } //成績集合}static void Main(string[] args){ //初始化泛型類List<Student>,集合中的元素包含一個成績的內部序列List<int> List<Student> students = new List<Student>(); students.Add(new Student { Name = "張三", Scores = new List<int> { 93, 72, 88, 78 } }); students.Add(new Student { Name = "李四", Scores = new List<int> { 95, 71, 88, 68 } }); //使用Linq查詢 var Query = from student in students where student.Scores.Average() >= 80 select new { 姓名 = student.Name, 成績 = student.Scores.Average() }; foreach (var q in Query) Console.WriteLine("{0} {1}", q.姓名, q.成績);}輸出:張三 82.75 / 李四 80.5