クラス内において反復処理の機能を実装するためのforeachステートメントは、とかくプログラムコードが複雑に、かつ冗長になってしまうことがあります。 このような場合はイテレーターを利用することで反復処理のコードをシンプルにすることができます
参考書の説明を読んでも???だったけど、実際にコード書いてみたらなんとなくわかったような気がする。
下のコードの例のように、反復中に条件を挟みたい場合なんかはメインプログラム側で制御が必要になってくるけど、イテレータを使えば反復処理を外に出すことができるからメインプログラムをシンプルにできるってことかな。 うまく言語化できてないけど、こんな感じかな。
class Program { public static IEnumerable MethodShow(int days) { DateTime dt = DateTime.Today; for (int i = 1; i <= days; ) { if (dt.DayOfWeek != DayOfWeek.Monday && dt.DayOfWeek != DayOfWeek.Thursday) { yield return dt; i++; } dt = dt.AddDays(1); } } static void Main(string[] args) { foreach(DateTime dt in MethodShow(5)) { Console.WriteLine(dt.ToString("yyyy年MM月dd日(ddd)")); } } }
出力
2015年08月30日(日) 2015年09月01日(火) 2015年09月02日(水) 2015年09月04日(金) 2015年09月05日(土)