首頁 > 後端開發 > C++ > C# 中的「yield」關鍵字如何建立迭代器並提高效能?

C# 中的「yield」關鍵字如何建立迭代器並提高效能?

Linda Hamilton
發布: 2025-01-27 17:41:08
原創
783 人瀏覽過

How Does the `yield` Keyword Work in C# to Create Iterators and Improve Performance?

C# 中 yield 關鍵字:迭代器與效能最佳化

yield 關鍵字在 C# 中扮演著至關重要的角色,它簡化了枚舉器的實作和迭代器的創建,顯著提升了程式碼的可讀性和效能。讓我們深入了解其功能。

逐步回傳結果 (Yielding Results)

yield 關鍵字允許方法暫停其執行,並逐步傳回結果。當呼叫函數迭代一個實作了 IEnumerable 介面的物件時,包含 yield 關鍵字的方法會被重複調用,直到返回序列結束。此機制稱為「逐步返回」(yielding)。

例如,考慮以下程式碼片段:

<code class="language-csharp">IEnumerable<object> FilteredList()
{
    foreach (object item in FullList)
    {
        if (IsItemInPartialList(item))
            yield return item;
    }
}</code>
登入後複製

FilteredList() 方法依條件從 FullList 逐步傳回物件。當呼叫方迭代結果時,該方法會逐一返回每個匹配項。

實作迭代器 (Implementing Iterators)

yield 關鍵字簡化了自訂迭代器的建立。在 C# 的早期版本中,必須使用 IEnumerator 物件手動實作枚舉器。 yield 提供了一個更簡潔、更聲明式的方法:

<code class="language-csharp">public IEnumerable<int> Integers()
{
    yield return 1;
    yield return 2;
    yield return 4;
    yield return 8;
    yield return 16;
    yield return 16777216;
}</code>
登入後複製

這段程式碼回傳一個整數序列,無需明確迭代邏輯。

實際應用 (Real-Life Usage)

在實際應用中,yield 常用於惰性求值場景,例如從資料庫檢索資料。考慮以下範例:

<code class="language-csharp">public IEnumerable<T> Read<T>(string sql, Func<IDataReader, T> make, params object[] parms)
{
    using (var connection = CreateConnection())
    {
        using (var command = CreateCommand(CommandType.Text, sql, connection, parms))
        {
            command.CommandTimeout = dataBaseSettings.ReadCommandTimeout;
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return make(reader);
                }
            }
        }
    }
}</code>
登入後複製

此方法建構一個枚舉器,從資料庫表中取得記錄,並根據提供的映射函數 make() 建立類型為 T 的物件。透過使用 yield,該方法避免將整個結果集載入到記憶體中,從而在處理大型資料集時提高效能。

以上是C# 中的「yield」關鍵字如何建立迭代器並提高效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板