首頁 >後端開發 >C++ >C# 中的 IEnumerable 和 IEnumerator:它們如何啟用 foreach 迴圈和自訂迭代器?

C# 中的 IEnumerable 和 IEnumerator:它們如何啟用 foreach 迴圈和自訂迭代器?

Patricia Arquette
Patricia Arquette原創
2025-01-09 12:51:41671瀏覽

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

深入理解 IEnumerable 與 IEnumerator:.NET 迭代器的核心機制

在 .NET 程式設計中,實作 IEnumerable 介面是啟用 foreach 迴圈的關鍵。雖然 foreach 語法簡潔易用,但其底層依賴 IEnumerable 和 IEnumerator 介面。

IEnumerable 和 IEnumerator 的應用場景

IEnumerable 不是用來「取代」 foreach 的;相反,實作 IEnumerable 是使用 foreach 的前提條件。當您編寫 foreach 迴圈時,編譯器實際上會將其轉換為一系列對 IEnumerator 的 MoveNext 和 Current 方法的呼叫。

IEnumerable 與 IEnumerator 的差別

  • IEnumerable: 定義了 GetEnumerator 方法的接口,該方法傳回一個 IEnumerator。
  • IEnumerator: 定義了 MoveNext 和 Current 兩個方法的介面。 MoveNext 將迭代器移至序列中的下一項,而 Current 傳回目前項。

為什麼我們需要 IEnumerable 和 IEnumerator?

  • 自訂迭代器: 透過在自訂類別上實作 IEnumerable,您可以使用 foreach 迴圈遍歷這些類別。
  • 理解迭代器機制: IEnumerator 提供了一種低階的機制來遍歷集合,讓您控制遍歷過程。
  • 泛型集合: C# 編譯器使用 IEnumerable 和 IEnumerator 來建立泛型集合類,例如 List 和 Dictionary
  • 非同步程式設計: IEnumerator 可以與非同步程式設計模型結合使用,以遍歷非同步序列。

實作 IEnumerable

要使類別可迭代,您需要實作 IEnumerable 接口,這需要實作返回 IEnumerator 的 GetEnumerator 方法。

範例

考慮以下實作 IEnumerable 介面的自訂物件類別:

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>

透過實作 IEnumerable 並提供自訂枚舉器,您現在可以使用 foreach 迴圈遍歷 CustomCollection 的實例。

以上是C# 中的 IEnumerable 和 IEnumerator:它們如何啟用 foreach 迴圈和自訂迭代器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn