ホームページ >バックエンド開発 >C++ >C# `every`キーワードは、命令的な反復をどのように簡素化しますか?

C# `every`キーワードは、命令的な反復をどのように簡素化しますか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-27 17:31:10308ブラウズ

How Does the C# `yield` Keyword Simplify Imperative Iteration?

C# 's yield効率的なイテレーションのキーワード

を理解します C#2.0で導入された

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は再開され、次のforeachConsumer()Integers()yield returnを使用することの重要な利点

yield単純化されたイテレーション:

    および
  • の手動の実装を回避し、よりクリーンで簡潔なコードをもたらします。 メモリ効率:IEnumerable値はオンデマンドで生成され、メモリの使用状況を最小限に抑えます。特に大きなデータセットを扱うときに有益です。 IEnumerator
  • 読みやすさの向上:
  • 特に反復プロセスとデータストリーミングを処理する場合、コードの意図が明確になります。 シーケンスを生成するためのロジックは、メソッド内に直接埋め込まれています。

以上がC# `every`キーワードは、命令的な反復をどのように簡素化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。