System.Collectionsobject[] 儲存,自動擴容object,值類型會發生裝箱/拆箱List<T> 避免裝箱效能損耗
ArrayList list = new ArrayList(10); // 指定初始容量
for (int i = 0; i < 10; i++) list.Add(i);
// IEnumerable 列舉
IEnumerator enumerator = list.GetEnumerator();
while (enumerator.MoveNext())
Console.Write(enumerator.Current + " "); // 0 1 2 3 4 5 6 7 8 9

| 分類 | 成員 | 說明 |
|---|---|---|
| 屬性 | Count | 目前元素數量 |
Capacity | 內部陣列容量(自動成長) | |
IsFixedSize / IsReadOnly / IsSynchronized | 固定大小/唯讀/執行緒安全 | |
| 方法 | Add(object) | 附加元素,回傳索引 |
AddRange(ICollection) | 批次附加 | |
Insert(index, object) | 指定位置插入 | |
Remove(object) | 移除第一個相符元素 | |
RemoveAt(index) | 移除指定索引元素 | |
RemoveRange(index, count) | 批次移除 | |
Clear() | 清空所有元素 | |
Contains(object) | 是否包含元素 | |
IndexOf(object) / LastIndexOf(object) | 搜尋索引 | |
Reverse() | 反轉順序 | |
Sort() / Sort(IComparer) | 排序 | |
ToArray() / CopyTo(Array) | 轉型為陣列 |
ArrayList movies = new ArrayList(5);
movies.Add("仙劍一");
movies.Add("亮劍");
movies.Add("bianceng.");
movies.Add("國家寶藏");
movies.Add("陸小鳳");
Console.WriteLine($"初始數量: {movies.Count}"); // 5
// 列印
foreach (var m in movies) Console.WriteLine(m);
// 反轉
movies.Reverse();
Console.WriteLine("反轉後:");
foreach (var m in movies) Console.WriteLine(m);
// 新增
movies.Add("新元素");
Console.WriteLine($"新增後: {movies.Count}"); // 6
// 移除特定值
movies.Remove("亮劍");
Console.WriteLine($"移除亮劍: {movies.Count}"); // 5
// 移除指定索引
movies.RemoveAt(2);
Console.WriteLine($"移除索引2: {movies.Count}"); // 4
// 插入
movies.Insert(1, "系統級");
Console.WriteLine($"插入後: {movies.Count}"); // 5
// 搜尋
int idx = movies.IndexOf("系統級"); // 1
bool has = movies.Contains("國家寶藏"); // true
// 複製到陣列
string[] arr = new string[movies.Count];
movies.CopyTo(arr, 0);
// 轉為 object 陣列
object[] objArr = movies.ToArray();

| 維度 | Array | ArrayList |
|---|---|---|
| 型別安全 | 編譯期強型別 | 執行期 object,需轉型 |
| 效能 | 值類型無裝箱,極快 | 值類型裝箱/拆箱開銷大 |
| 維度 | 支援多維 | 僅一維 |
| 下限 | 可自訂(罕用) | 固定 0 |
| 命名空間 | System | System.Collections |
| 介面 | IList, ICollection, IEnumerable | IList, ICollection, IEnumerable |
List<T>:泛型、型別安全、無裝箱、效能最佳ArrayListArrayList,請盡量集中轉型邏輯,減少分散的 castArray 或 List<T> 為首選ArrayList 是 .NET 1.x 時代的產物,提供動態陣列便利性但犧牲型別安全與效能。現代 C# 開發應全面轉向 List<T>、Span<T>、Memory<T> 等泛型高效能替代方案。理解 ArrayList 內部機制(裝箱、擴容、非泛型介面)有助於重構舊系統與排查效能瓶頸。