(转)C#2.0泛型--Dictionary,List用法
生活随笔
收集整理的這篇文章主要介紹了
(转)C#2.0泛型--Dictionary,List用法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C#2.0泛型--Dictionary,List用法
泛型是?C#2.0?語言和公共語言運行庫?(CLR)?中的一個新功能。泛型將類型參數(shù)的概念引入?.NET?Framework,類型參數(shù)使得設計如下類和方法成為可能:這些類和方法將一個或多個類型的指定推遲到客戶端代碼聲明并實例化該類或方法的時候。例如,通過使用泛型類型參數(shù)?T,可以編寫其他客戶端代碼能夠使用的單個類,而不致引入運行時強制轉換或裝箱操作.
使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。
泛型最常見的用途是創(chuàng)建集合類。
.NET?Framework?類庫在?System.Collections.Generic?命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來代替普通的類,如?System.Collections?命名空間中的?ArrayList,HashTable等。
下面我們就來說下,幾個泛型集合類的用法:
一.Dictionary?
此類在?.NET?Framework?2.0?版中是新增的。表示鍵和值的集合。命名空間:System.Collections.Generic,程序集:mscorlib(在?mscorlib.dll?中)Dictionary遍歷輸出的順序,就是加入的順序,這點與Hashtable不同,其它方法如:ContainsKey?,ContainsValue?,Remove?等,使用方法基本一致。
?1class?TestGenericList
?2????{
?3?????????static?void?Main()
?4????????{
?5?//聲明對象,參數(shù)表示,鍵是int類型,值是string類型
?6????????????Dictionary<int,?string>?fruit?=?new?Dictionary<int,?string>();
?7????????????try{
?8?????????????//加入重復鍵會引發(fā)異常
?9????????????????fruit.Add(1,?"蘋果");
10????????????????fruit.Add(2,?"桔子");
11????????????????fruit.Add(3,?"香蕉");
12????????????????fruit.Add(4,?"菠蘿");????????????
13??//參數(shù)錯誤將引發(fā)異常,如下所示
14??//fruit.Add("5",?"aa");
15????????????}
16????????????catch?(ArgumentException)
17????????????{
18????????????????Console.WriteLine("添加錯誤!!!");
19????????????}
20?//因為引入了泛型,所以鍵取出后不需要進行Object到int的轉換,值的集合也一樣
21????????????foreach?(int?i?in?fruit.Keys)
22????????????{
23????????????????Console.WriteLine("鍵是:{0}??值是:{1}",i,fruit);
24????????????}
25??????//刪除指定鍵,值
26????????????fruit.Remove(1);
27?????????????//判斷是否包含指定鍵
28????????????if?(fruit.ContainsKey(1))
29????????????{
30????????????????Console.WriteLine("包含此鍵");
31????????????}
32????????????//清除集合中所有對象
33????????????fruit.Clear();
34????????}
35????}
36
二、List類
注意:此類在?.NET?Framework?2.0?版中是新增的。表示可通過索引訪問的對象的強類型列表。提供用于對列表進行搜索、排序和操作的方法。命名空間:?System.Collections.Generic,程序集:mscorlib(在?mscorlib.dll?中),List?類是?ArrayList?類的泛型等效類。
?1????class?TestGenericList
?2????{
?3????????static?void?Main()
?4????????{
?5????????????//聲明一個List對象,只加入string參數(shù)
?6????????????List<string>?names?=?new?List<string>();
?7????????????names.Add("喬峰");
?8????????????names.Add("歐陽峰");
?9????????????names.Add("馬蜂");
10????????????//遍歷List
11????????????foreach?(string?name?in?names)
12????????????{
13????????????????Console.WriteLine(name);
14????????????}
15????????????//向List中插入元素
16????????????names.Insert(2,?"張三峰");
17????????????//移除指定元素
18????????????names.Remove("馬蜂");???????????
19????????}
20????}
21
???//聲明一個泛型類??
在決定使用?List?還是使用?ArrayList?類(兩者具有類似的功能)時,記住?List?類在大多數(shù)情況下執(zhí)行得更好并且是類型安全的。如果對?List?類的類型?T?使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型?T?使用值類型,則需要考慮實現(xiàn)和裝箱問題。
如果對類型?T?使用值類型,則編譯器將特別針對該值類型生成?List?類的實現(xiàn)。這意味著不必對?List?對象的列表元素進行裝箱就可以使用該元素,并且在創(chuàng)建大約?500?個列表元素之后,不對列表元素裝箱所節(jié)省的內存將大于生成該類實現(xiàn)所使用的內存。
其實我們也可以自己定義一個泛型類,如下所示:
?1???//聲明一個泛型類
?2????public?class?ItemList<T>
?3????{
?4????????void?Add(T?item)?{?}
?5????}
?6????class?TestGenericList
?7????{
?8????????private?class?ExampleClass?{?}
?9????????static?void?Main()
10????????{
11????????????//?聲明一個對象,只能加入int型
12????????????ItemList<int>?list1?=?new?ItemList<int>();
13
14????????????//聲明一個對象,只能加入Student類型,Student類為自定義類
15????????????ItemList<Student>?list2?=?new?ItemList<Student>();
16
17????????}
18????}
泛型的用法還有很多種,如泛型方法,泛型委托,泛型接口等。
泛型是?C#2.0?語言和公共語言運行庫?(CLR)?中的一個新功能。泛型將類型參數(shù)的概念引入?.NET?Framework,類型參數(shù)使得設計如下類和方法成為可能:這些類和方法將一個或多個類型的指定推遲到客戶端代碼聲明并實例化該類或方法的時候。例如,通過使用泛型類型參數(shù)?T,可以編寫其他客戶端代碼能夠使用的單個類,而不致引入運行時強制轉換或裝箱操作.
使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。
泛型最常見的用途是創(chuàng)建集合類。
.NET?Framework?類庫在?System.Collections.Generic?命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來代替普通的類,如?System.Collections?命名空間中的?ArrayList,HashTable等。
下面我們就來說下,幾個泛型集合類的用法:
一.Dictionary?
此類在?.NET?Framework?2.0?版中是新增的。表示鍵和值的集合。命名空間:System.Collections.Generic,程序集:mscorlib(在?mscorlib.dll?中)Dictionary遍歷輸出的順序,就是加入的順序,這點與Hashtable不同,其它方法如:ContainsKey?,ContainsValue?,Remove?等,使用方法基本一致。
?1class?TestGenericList
?2????{
?3?????????static?void?Main()
?4????????{
?5?//聲明對象,參數(shù)表示,鍵是int類型,值是string類型
?6????????????Dictionary<int,?string>?fruit?=?new?Dictionary<int,?string>();
?7????????????try{
?8?????????????//加入重復鍵會引發(fā)異常
?9????????????????fruit.Add(1,?"蘋果");
10????????????????fruit.Add(2,?"桔子");
11????????????????fruit.Add(3,?"香蕉");
12????????????????fruit.Add(4,?"菠蘿");????????????
13??//參數(shù)錯誤將引發(fā)異常,如下所示
14??//fruit.Add("5",?"aa");
15????????????}
16????????????catch?(ArgumentException)
17????????????{
18????????????????Console.WriteLine("添加錯誤!!!");
19????????????}
20?//因為引入了泛型,所以鍵取出后不需要進行Object到int的轉換,值的集合也一樣
21????????????foreach?(int?i?in?fruit.Keys)
22????????????{
23????????????????Console.WriteLine("鍵是:{0}??值是:{1}",i,fruit);
24????????????}
25??????//刪除指定鍵,值
26????????????fruit.Remove(1);
27?????????????//判斷是否包含指定鍵
28????????????if?(fruit.ContainsKey(1))
29????????????{
30????????????????Console.WriteLine("包含此鍵");
31????????????}
32????????????//清除集合中所有對象
33????????????fruit.Clear();
34????????}
35????}
36
二、List類
注意:此類在?.NET?Framework?2.0?版中是新增的。表示可通過索引訪問的對象的強類型列表。提供用于對列表進行搜索、排序和操作的方法。命名空間:?System.Collections.Generic,程序集:mscorlib(在?mscorlib.dll?中),List?類是?ArrayList?類的泛型等效類。
?1????class?TestGenericList
?2????{
?3????????static?void?Main()
?4????????{
?5????????????//聲明一個List對象,只加入string參數(shù)
?6????????????List<string>?names?=?new?List<string>();
?7????????????names.Add("喬峰");
?8????????????names.Add("歐陽峰");
?9????????????names.Add("馬蜂");
10????????????//遍歷List
11????????????foreach?(string?name?in?names)
12????????????{
13????????????????Console.WriteLine(name);
14????????????}
15????????????//向List中插入元素
16????????????names.Insert(2,?"張三峰");
17????????????//移除指定元素
18????????????names.Remove("馬蜂");???????????
19????????}
20????}
21
???//聲明一個泛型類??
在決定使用?List?還是使用?ArrayList?類(兩者具有類似的功能)時,記住?List?類在大多數(shù)情況下執(zhí)行得更好并且是類型安全的。如果對?List?類的類型?T?使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型?T?使用值類型,則需要考慮實現(xiàn)和裝箱問題。
如果對類型?T?使用值類型,則編譯器將特別針對該值類型生成?List?類的實現(xiàn)。這意味著不必對?List?對象的列表元素進行裝箱就可以使用該元素,并且在創(chuàng)建大約?500?個列表元素之后,不對列表元素裝箱所節(jié)省的內存將大于生成該類實現(xiàn)所使用的內存。
其實我們也可以自己定義一個泛型類,如下所示:
?1???//聲明一個泛型類
?2????public?class?ItemList<T>
?3????{
?4????????void?Add(T?item)?{?}
?5????}
?6????class?TestGenericList
?7????{
?8????????private?class?ExampleClass?{?}
?9????????static?void?Main()
10????????{
11????????????//?聲明一個對象,只能加入int型
12????????????ItemList<int>?list1?=?new?ItemList<int>();
13
14????????????//聲明一個對象,只能加入Student類型,Student類為自定義類
15????????????ItemList<Student>?list2?=?new?ItemList<Student>();
16
17????????}
18????}
泛型的用法還有很多種,如泛型方法,泛型委托,泛型接口等。
轉載于:https://www.cnblogs.com/diony/archive/2012/06/06/2537752.html
總結
以上是生活随笔為你收集整理的(转)C#2.0泛型--Dictionary,List用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: usaco1.2.2 transform
- 下一篇: ArcGIS Engine 10 开发常