C#でイテレーター

C# コンピュータ
C#
筆者の中でイテレーターと言いますとyeildという読み方が想像できない単語を使う構文という認識で、何かの言語(スクリプト系?)で学んで便利だった記憶がありますが、内容はすっかり忘れてしまいました。
C#でも使えるようなので調べてみました。
using System.Collections.Generic;

static IEnumerable<string> ItratorFunc(int times)
{
    for(int i = 0; i < times; i++)
    {
        Console.WriteLine("yield");
        yield return $"{i}";
    }
}

foreach(var s in ItratorFunc(10))
{
    Console.WriteLine(s);
}
ItratorFunc()は一見すると戻り値の型がIEnumerable<string>ですので0~9までの数字を文字配列として返してforeachするように見えます。ただItratorFunc()return手前にyieldが記述されており、普通のreturn構文とは異なっています。
実行結果は以下の通り
yield
0
yield
1
yield
2
~省略~
yield
9
各項目の出力の途中にyieldが表示されており、各要素ごとにIteratorFuncforeachのループを行ったり来たりしていることが確認出来ます。

各要素に対して実施したい共通部分をメソッドとして外に出すことで再利用をしながら、個別の要件はforeach側で処理することで様々なシュチュエーションで柔軟な対応が出来る構文だと思います。

使わないと忘れてしまうので、忘れる前に何かに使ってみたいと思います。

コメント