|  |  | 
 
| 連載:[完全版]究極のC#プログラミングChapter3 新しい繰り返しのスタイル ― yield return文とForEachメソッド川俣 晶2009/08/31
 |  | 
| 
 | 
3.5 yield break文による中断
 さて、ここで気になるのはyield return文が列挙を中断しないとしたら、中断させるにはどうすればよいのか……ということである。
 処理の途中で何かの例外的条件に引っ掛かって、そこで処理を打ち切るのは定番処理の1つである。
 ここで、「簡単簡単。return文でメソッドを抜ければ終わるのだろう?」と考えた読者も多いと思うが話はそれほど甘くはない。なぜなら、反復子ブロックは“ブロックであってブロックではない”からだ。反復子ブロックは、実際に実行される場合には、バラバラに分解され、自動的に生成される列挙子オブジェクトに組み込まれることになる。その結果として、単純にreturn文で抜け出せるような簡単な構造ではなくなっているのだ。
 しかし、それでは不便なので、途中で反復子ブロックを打ち切って終了する「yield break文」が用意されている。これを使えば、途中で打ち切る処理は容易に記述できる。
 リスト3.4にそれを使った例を示す。リスト3.4では「yield break;」が実行されるとその後のコードは実行されないので、「[#を返す]」や「#」が出力されることはない。
| 
 
| using System;using System.Collections.Generic;
 
 class Sample
 {
 public IEnumerator<char> GetEnumerator()
 {
 Console.Write("[Cを返す]");
 yield return 'C';
 
 Console.Write("[yield break実行]");
 yield break;
 
 Console.Write("[#を返す]");
 yield return '#';
 }
 }
 
 class Program
 {
 static void Main(string[] args)
 {
 foreach (char c in new Sample())
 {
 Console.Write("{0}", c);
 }
 // 出力:[Cを返す]C[yield break実行]
 }
 }
 
 |  | 
| リスト3.4 yield break文で処理を打ち切る | 
 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間