読者です 読者をやめる 読者になる 読者になる

かわろぐ

技術、ボルダリング、セキュリティ、その他もろもろ

MENU

C# の yield return の挙動

C#

yield って?

単純な英単語として日本語訳すると、(作物、製品などを)産する、(結果などを)引き起こす、譲る。という意味の単語のようです。

どうやって使うの?

C#のキーワードとしての yield は、 IEnumerable を戻り値としたメソッドでコレクションの値を返すためのものです。何が便利かというと、メソッド内に一時的なコレクションを生成しなくとも勝手に暗黙的なコレクションに保存していき、メソッドの処理がすべて完了したらまとめて返してくれるという挙動をします。

雑ですが簡単なサンプルを。

yield サンプル

サンプルのように yield return を含むブロックのことを イテレーターブロックと言います。 GetNameの戻り値にある通り、IEnumerable で返してくれて、中身には "hoge" と "huga" の2つが入っています。 実行結果を見てもわかると思いますが、yield return はその時点で処理を終了させません。

LINQPadで実行すると下記のようになります。 f:id:kawa_xxx:20160220124001p:plain

今回は yield return をベタで2つ書きましたが、 foreach などループの中に書いても同じようになります。

Effective C# 4.0

Effective C# 4.0

参考文献