連載:[完全版]究極の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;」が実行されるとその後のコードは実行されないので、「[#を返す]」や「#」が出力されることはない。
| |
リスト3.4 yield break文で処理を打ち切る |
INDEX | ||
[完全版]究極のC#プログラミング | ||
Chapter3 新しい繰り返しのスタイル ― yield return文とForEachメソッド | 1.3.1 「繰り返し」という古くて新しい問題 | |
2.3.2 数を数えるというサンプル | ||
3.3.3 C# 1.xによるRangeクラスの実装 | ||
4.3.4 C# 3.0によるRangeクラスの実装 | ||
5.3.5 yield break文による中断 | ||
6.3.6 yieldは予約語ではない | ||
7.3.7 1つのクラスに複数の列挙機能を付ける | ||
8.3.8 自動的に作られるオブジェクトと二重利用 | ||
9.3.9 catchできない制約 | ||
10.3.10 制約の真相―見た目と違う真実の姿 | ||
11.3.11 ForEachメソッドを使う別解 | ||
12.3.12 性能比較 | ||
「[完全版]究極のC#プログラミング」 |
Insider.NET フォーラム 新着記事
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|