国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ArrayList的使用和List<T>的比較

2019-11-17 02:50:34
字體:
來源:轉載
供稿:網友
ArrayList的使用和List<T>的比較

使用非泛型集合類的限制可以通過編寫一小段程序來演示,該程序利用 .NET Framework 基類庫中的ArrayList集合類。ArrayList是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。

[csharp]view plaincopy
  1. //The.NETFramework1.1waytocreatealist:
  2. System.Collections.ArrayListlist1=newSystem.Collections.ArrayList();
  3. list1.Add(3);
  4. list1.Add(105);
  5. System.Collections.ArrayListlist2=newSystem.Collections.ArrayList();
  6. list2.Add("ItisraininginRedmond.");
  7. list2.Add("Itissnowinginthemountains.");

但這種方便是需要付出代價的。添加到ArrayList中的任何引用或值類型都將隱式地向上強制轉換為Object。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。

另一個限制是缺少編譯時類型檢查;因為ArrayList將把所有項都強制轉換為Object,所以在編譯時無法防止客戶端代碼執行以下操作:

[csharp]view plaincopy
  1. System.Collections.ArrayListlist=newSystem.Collections.ArrayList();
  2. //Addanintegertothelist.
  3. list.Add(3);
  4. //Addastringtothelist.Thiswillcompile,butmaycauseanerrorlater.
  5. list.Add("ItisraininginRedmond.");
  6. intt=0;
  7. //ThiscausesanInvalidCastExceptiontobereturned.
  8. foreach(intxinlist)
  9. {
  10. t+=x;
  11. }

盡管將字符串和ints組合在一個ArrayList中的做法在創建異類集合時是完全合法的,有時是有意圖的,但這種做法更可能產生編程錯誤,并且直到運行時才能檢測到此錯誤。

在 C# 語言的 1.0 和 1.1 版本中,只能通過編寫自己的特定于類型的集合來避免 .NET Framework 基類庫集合類中的通用代碼的危險。當然,由于此類不可對多個數據類型重用,因此將喪失通用化的優點,并且您必須對要存儲的每個類型重新編寫該類。

ArrayList和其他相似類真正需要的是:客戶端代碼基于每個實例指定這些類要使用的具體數據類型的方式。這樣將不再需要向上強制轉換為T:System.Object,同時,也使得編譯器可以進行類型檢查。換句話說,ArrayList需要一個type parameter。這正是泛型所能提供的。在N:System.Collections.Generic命名空間的泛型List<T>集合中,向該集合添加項的操作類似于以下形式:

[csharp]view plaincopy
  1. //The.NETFramework2.0waytocreatealist
  2. List<int>list1=newList<int>();
  3. //Noboxing,nocasting:
  4. list1.Add(3);
  5. //Compile-timeerror:
  6. //list1.Add("ItisraininginRedmond.");

對于客戶端代碼,與ArrayList相比,使用List<T>時添加的唯一語法是聲明和實例化中的類型參數。雖然這稍微增加了些編碼的復雜性,但好處是您可以創建一個比ArrayList更安全并且速度更快的列表,特別適用于列表項是值類型的情況。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵溪市| 灌阳县| 襄汾县| 七台河市| 台中市| 乌兰浩特市| 兰西县| 团风县| 文山县| 兴文县| 林芝县| 普格县| 乐安县| 吉林市| 临猗县| 三台县| 大丰市| 茶陵县| 克什克腾旗| 苏尼特右旗| 资中县| 库伦旗| 芷江| 鄂尔多斯市| 疏勒县| 广平县| 光泽县| 休宁县| 泰州市| 鱼台县| 西城区| 乌拉特前旗| 抚宁县| 绵竹市| 稷山县| 泰和县| 宁德市| 卓资县| 子洲县| 革吉县| 遂平县|