C# 's yield
効率的なイテレーションのキーワード
yield
キーワードは、必須の反復を大幅に合理化します。 この例を考えて、IEnumerable<T>
:
<code class="language-csharp">IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } }</code>
この関数は、メモリに完全なリストを作成しません。代わりに、イテレーターを返します。呼び出しコードのforeach
ループが次の項目を要求するたびに、FilteredList()
関数は、次のitem
を評価し、条件が満たされている場合にのみ返す実行を再開します。
このコードをデバッグすると、
<code class="language-csharp">public void Consumer() { foreach(int i in Integers()) { Console.WriteLine(i); } } public IEnumerable<int> Integers() { yield return 1; yield return 2; yield return 4; yield return 8; yield return 16; yield return 16777216; }</code>は一度に完全に実行されないことが明らかになりました。 A
にヒットするまで実行し、単一の値を返します。 Integers()
ループの次の反復により、yield return
は再開され、次のforeach
。
Consumer()
Integers()
:yield return
を使用することの重要な利点
yield
単純化されたイテレーション:
IEnumerable
値はオンデマンドで生成され、メモリの使用状況を最小限に抑えます。特に大きなデータセットを扱うときに有益です。
IEnumerator
以上がC# `every`キーワードは、命令的な反復をどのように簡素化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。