【お勉強記録】C#文法学び直し。yield
いまさらですけど、ちょっとあやふやになっていたC#の文法を改めて学びなおしています。
yieldについて
自分でコレクションクラスを作る場合、イテレータのインターフェースに対応するメソッドを実装必要があるけど、簡単に実装できる方法がイテレータ構文(yeild)。 イテレータはコレクションの要素を順次取り出す機能のこと。
using System; using System.Collections.Generic; using System.Collections; namespace Test { class Program { static void Main(string[] args) { var lists = new Example_Iterator(); //遅延実行されてるか確かめるために何か表示してみる Console.WriteLine("BerforeForeach"); foreach (var item in lists) { Console.WriteLine(item.ToString()); } //コンソールを表示したままにするために入力を待つ。 Console.ReadLine(); } } public class Example_Iterator:IEnumerable { public IEnumerator GetEnumerator() { Console.WriteLine("ONE"); yield return 1; Console.WriteLine("TWO"); yield return 2; Console.WriteLine("THREE"); yield return 3; } } }
実行結果は
BerforeForeach ONE 1 TWO 2 THREE 3
きちんとyeild returnで処理が止まってそうです。 また、取り出しの時に初めて処理が行われています。
イテレータブロックでは戻り値の型が
IEnumerable
IEnumerable<T>
IEnumerator
IEnumerator<T>
のいずれかに。
ちなみにyeildの読みはWeblioで聞いた感じだと「いぃーろぉ」に聞こえました。