首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# ArrayList 與 List<T> 成員對應完整表與遷移注意事項

     編輯:關於C語言

前言

從 ArrayList 遷移至 List<T> 是提升應用程式效能與型別安全的關鍵步驟。本文提供完整成員對應表,並深入討論遷移時的關鍵差異與應對策略。

完整成員對應表

ArrayList 成員List<T> 對應成員備註
Capacity 屬性Capacity 屬性完全相同
Count 屬性Count 屬性完全相同
IsFixedSize 屬性((IList)list).IsFixedSize永遠 false
IsReadOnly 屬性((IList)list).IsReadOnly永遠 false
IsSynchronized 屬性((IList)list).IsSynchronized永遠 false
Item 索引器Item 索引器完全相同
SyncRoot 屬性((IList)list).SyncRoot回傳 this
Adapter 靜態方法無無替代
Add 方法Add 方法型別安全版本
AddRange 方法AddRange 方法完全相同
AsReadOnly 方法AsReadOnly 方法List<T> 獨有
BinarySearch 方法BinarySearch 方法型別安全版本
Clear 方法Clear 方法完全相同
Clone 方法GetRange(0, Count)淺拷貝替代
Contains 方法Contains 方法型別安全版本
ConvertAll 方法ConvertAll 方法List<T> 獨有
CopyTo 方法CopyTo 方法完全相同
Exists 方法Exists 方法List<T> 獨有
Find 方法Find 方法List<T> 獨有
FindAll 方法FindAll 方法List<T> 獨有
FindIndex 方法FindIndex 方法List<T> 獨有
FindLast 方法FindLast 方法List<T> 獨有
FindLastIndex 方法FindLastIndex 方法List<T> 獨有
ForEach 方法ForEach 方法List<T> 獨有
FixedSize 靜態方法無無替代
GetRange 方法GetRange 方法完全相同
IndexOf 方法IndexOf 方法型別安全版本
Insert 方法Insert 方法完全相同
InsertRange 方法InsertRange 方法完全相同
LastIndexOf 方法LastIndexOf 方法型別安全版本
ReadOnly 靜態方法AsReadOnly 方法語意相似
Remove 方法Remove 方法型別安全版本
RemoveAll 方法RemoveAll 方法List<T> 獨有
RemoveAt 方法RemoveAt 方法完全相同
RemoveRange 方法RemoveRange 方法完全相同
Repeat 靜態方法for 迴圈 + Add自行實作
Reverse 方法Reverse 方法完全相同
SetRange 方法InsertRange 方法語意相似
Sort 方法Sort 方法型別安全版本
Synchronized 靜態方法lock(list) { ... }手動同步
ToArray 方法ToArray 方法型別安全版本
TrimToSize 方法TrimExcess 方法方法名不同
TrueForAll 方法TrueForAll 方法List<T> 獨有

關鍵遷移差異與應對

1. ICloneable 介面缺失

ArrayList 實作 ICloneable,List<T> 未實作。

// ArrayList
var clone = (ArrayList)original.Clone();

// List 替代方案
var clone = original.GetRange(0, original.Count);  // 淺拷貝
// 或
var clone = new List<T>(original);  // 建構函數複製

2. 同步化機制根本不同

// ArrayList 內建同步包裝
var syncList = ArrayList.Synchronized(list);
syncList.Add(item);  // 看似安全,但複合操作仍不安全

// List 顯式鎖定
lock (list) { list.Add(item); }  // 明確、可控、複合操作也安全

3. 固定大小/唯讀包裝器缺失

ArrayList.FixedSize()、ArrayList.ReadOnly() 無對應。List<T> 僅提供 AsReadOnly() 回傳 ReadOnlyCollection<T>。

4. Adapter 靜態方法無替代

ArrayList.Adapter(IList) 將任意 IList 包裝為 ArrayList。泛型無此功能,因型別參數化使包裝意義不大。

遷移檢核清單

  1. ✅ 將 ArrayList 宣告改為 List<T>(指定具體型別)
  2. ✅ 移除所有 (Type) 強制轉型
  3. ✅ 將 Clone() 改為 GetRange(0, Count) 或 new List<T>(source)
  4. ✅ 將 ArrayList.Synchronized() 相關代碼改為 lock 陳述式
  5. ✅ 檢查 Repeat 靜態方法使用處,改為迴圈 Add
  6. ✅ 評估預估元素數量,建構時指定 Capacity
  7. ✅ 善用 FindAll、ConvertAll、ForEach 等 List<T> 獨有功能簡化代碼

總結

List<T> 不只是 ArrayList 的泛型版本,更是功能超集。遷移過程中雖需處理少數 API 差異,但換來的是編譯期型別安全、零裝箱效能、豐富函數式操作方法。掌握對應表與替代方案,遷移將順利完成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved