服務(wù)熱線
153 8323 9821
在創(chuàng)建列表類時,列表項的數(shù)據(jù)類型可能是int、string或其他類型,但不管是什么類型,如果對列表類的處理方法相同,就沒有必要事先指定數(shù)據(jù)類型,留待列表類實例化時再指定。這相當(dāng)于把數(shù)據(jù)類型當(dāng)成參數(shù),可以最大限度地重用代碼、保護(hù)類型的安全以及提高性能。泛型將類型參數(shù)(type parameter)的概念引入.NET Framework,通常使用T作為泛型類型參數(shù)。
ArrayList是非泛型集合類,添加到ArrayList中的任何引用或值類型都將隱式地向上強制轉(zhuǎn)換為Object。如果項是值類型,則必須在將其添加到列表中時進(jìn)行裝箱操作,在檢索時進(jìn)行拆箱操作。另一個限制是缺少編譯時類型檢查,因為ArrayList將把所有項都強制轉(zhuǎn)換為Object,所以在編譯時無法防止客戶端代碼將int類型和string同時加入,編譯也能通過,直到運行時才能檢測到錯誤。
泛型最常見的用途是創(chuàng)建集合類。.NET Framework類庫在Collections.Generic命名空間中包含幾個泛型集合類。List<T>類是ArrayList類的泛型等效類。使用大小可按需動態(tài)增加的數(shù)組實現(xiàn)IList泛型接口。動態(tài)數(shù)組的好處是不必事先設(shè)置較大的數(shù)組,減少不必要的內(nèi)存開銷。
微軟MSDN的C#編程指南建議使用泛型集合類,如List<T>類,而不要使用非泛型集合類,如ArrayList類,也不要自行創(chuàng)建集合類。原因是不必做.NET Framework已經(jīng)完成的工作,公共語言運行庫能夠共享Microsoft中間語言代碼和元素?fù)?jù),這是自己編寫的強類型所無法做到的。
下面舉例說明List<T>的用法。
public class Student //學(xué)生類作為數(shù)據(jù)源
{
public string Name { get; set; }
public List<int> Scores { get; set; } //成績集合
}
static void Main(string[] args)
{
//初始化泛型類List<Student>,集合中的元素包含一個成績的內(nèi)部序列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
上一篇:C#中裝箱 開箱什么意思
下一篇:什么是泛型(C#)