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

.NET 集合介面體系深度解析:IEnumerable、ICollection、IList 選型指南

     編輯:關於.NET

介面繼承體系

IEnumerator
  → IEnumerable (GetEnumerator)
    → ICollection (Count, CopyTo, SyncRoot)
      → IList (Indexer, Add, Remove, Insert, Contains...)

介面職責詳解

介面核心成員語義典型實現
IEnumeratorCurrent, MoveNext(), Reset()逐個遍歷游標內部實現
IEnumerableGetEnumerator()可被 foreach 遍歷所有集合
ICollectionCount, IsSynchronized, SyncRoot, CopyTo()有大小、可複製到數組、線程同步Array, List, HashSet
IListIndexer, Add, Insert, Remove, IndexOf, IsFixedSize, IsReadOnly有序、可索引、可增刪改List, ArrayList

參數類型選型原則

1. 僅需遍歷、不修改 → ICollection

bool ProcessItems(ICollection items)
{
    if (items == null) throw new ArgumentNullException(nameof(items));
    if (items.Count == 0) return false; // O(1) 判斷,無需遍歷
    
    foreach (var item in items) { /* ... */ }
    return true;
}

理由:比 IEnumerable 多 Count 屬性,語義更精確(集合而非序列),避免多次枚舉陷阱。

2. 需增刪改、索引訪問 → IList

void ModifyList(IList list)
{
    list.Add(newItem);
    list.RemoveAt(0);
    var item = list[2];
}

返回類型選型原則

  • 只讀集合:返回 ICollection 或 IReadOnlyCollection<T> (.NET 4.5+)
  • 可修改集合:返回 IList 或 IList<T>
  • 通用建議:返回 IList 兼容性最好,調用者可向下轉型為 ICollection/IEnumerable

泛型版本(.NET 2.0+ 推薦)

IEnumerable<T> → ICollection<T> → IList<T>
IReadOnlyCollection<T> → IReadOnlyList<T> // 僅讀場景首選

總結

掌握 IEnumerable → ICollection → IList 漸進式介面體系,根據「最小接口原則」選型:參數盡量寬(基類介面),返回盡量窄(具體介面)。.NET 2.0+ 專案首選泛型版本,獲得類型安全與效能雙重收益。

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