從 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> 獨有 |
ArrayList 實作 ICloneable,List<T> 未實作。
// ArrayList
var clone = (ArrayList)original.Clone();
// List 替代方案
var clone = original.GetRange(0, original.Count); // 淺拷貝
// 或
var clone = new List<T>(original); // 建構函數複製
// ArrayList 內建同步包裝
var syncList = ArrayList.Synchronized(list);
syncList.Add(item); // 看似安全,但複合操作仍不安全
// List 顯式鎖定
lock (list) { list.Add(item); } // 明確、可控、複合操作也安全
ArrayList.FixedSize()、ArrayList.ReadOnly() 無對應。List<T> 僅提供 AsReadOnly() 回傳 ReadOnlyCollection<T>。
ArrayList.Adapter(IList) 將任意 IList 包裝為 ArrayList。泛型無此功能,因型別參數化使包裝意義不大。
ArrayList 宣告改為 List<T>(指定具體型別)(Type) 強制轉型Clone() 改為 GetRange(0, Count) 或 new List<T>(source)ArrayList.Synchronized() 相關代碼改為 lock 陳述式Repeat 靜態方法使用處,改為迴圈 AddCapacityFindAll、ConvertAll、ForEach 等 List<T> 獨有功能簡化代碼List<T> 不只是 ArrayList 的泛型版本,更是功能超集。遷移過程中雖需處理少數 API 差異,但換來的是編譯期型別安全、零裝箱效能、豐富函數式操作方法。掌握對應表與替代方案,遷移將順利完成。