IEnumerable, IEnumerable, ICollection, IList 差異 這些介面都是 .NET 中集合類型的部分,彼此之間有繼承關係與功能差異。以下是它們的主要差異與用途: --- ### ✅ **1. `IEnumerable`** - **定義**:最基本的集合介面,表示可以逐一列舉的集合。 - **用途**:支援 `foreach` 迴圈。 - **方法**: - `IEnumerator GetEnumerator()` - **限制**:只能讀取,無法修改集合內容。 --- ### ✅ **2. `IEnumerable`** - **定義**:泛型版本的 `IEnumerable`,提供型別安全的列舉。 - **用途**:LINQ 查詢的基礎。 - **方法**: - `IEnumerator GetEnumerator()` - **繼承自**:`IEnumerable` --- ### ✅ **3. `ICollection`** - **定義**:在 `IEnumerable` 基礎上,加入了集合的大小、加入與移除元素等功能。 - **用途**:表示可修改的集合。 - **方法與屬性**: - `int Count` - `bool IsReadOnly` - `void Add(T item)` - `bool Remove(T item)` - `void Clear()` - `bool Contains(T item)` - `void CopyTo(T[] array, int arrayIndex)` - **繼承自**:`IEnumerable` --- ### ✅ **4. `IList`** - **定義**:在 `ICollection` 基礎上,加入了索引存取功能。 - **用途**:表示有順序的集合,可透過索引存取與修改。 - **方法與屬性**: - `T this[int index] { get; set; }` - `int IndexOf(T item)` - `void Insert(int index, T item)` - `void RemoveAt(int index)` - **繼承自**:`ICollection` --- ### 📊 **繼承關係圖** ``` IEnumerable ↑ IEnumerable ↑ ICollection ↑ IList ``` --- ### 🧠 總結比較 | 介面 | 可列舉 | 可修改 | 有索引 | 常見用途 | |--------------|--------|--------|--------|------------------------------| | `IEnumerable` | ✅ | ❌ | ❌ | 最基本的列舉功能 | | `IEnumerable` | ✅ | ❌ | ❌ | 泛型列舉,支援 LINQ | | `ICollection` | ✅ | ✅ | ❌ | 可修改集合,支援 Add/Remove | | `IList` | ✅ | ✅ | ✅ | 有順序的集合,支援索引操作 | ---