連載:[完全版]究極のC#プログラミングChapter4 Findメソッド川俣 晶2009/09/14 |
|
|
4.2 ForEachメソッドのbreak問題
前章では、foreach文を使うよりも、System.Arrayクラスやジェネリックコレクションのクラスなどが持つForEachメソッドを使うほうが高速でお薦めだと書いた。
しかし、これは単に置き換えればよいというものではない。実際には置き換えられない事例があるからだ。
たとえば、次のリスト4.1はそのままForEachメソッドに書き換えられない。
| |
リスト4.1 ForEachメソッドに書き換えられない例 |
試しに、リスト4.1をForEachメソッドを使うように書き換えてみたのがリスト4.2である。
| |
リスト4.2 実際にはコンパイルできない書き換え |
しかし、このソースは「break;」の行で次のようなエラーになり、コンパイルできない。
| |
リスト4.2のコンパイル時に表示されるエラー |
コンパイルできない理由は明らかで、breakはループを脱出する文であるにもかかわらず、このソースにはループ(foreach/or/while/do)がないからである。
実はForEachメソッドを使うと、break/continue/return文は機能しなくなってしまう。return文の機能はcontinue文相当になり、break/continue文は使用することができない。
しかし、break文などでループを脱出するのは常識的に多用されるテクニックである。それが使えないとしたら、非常に問題が大きい。だが、foreach文抜きのプログラミングを行っていても、さほど困らない。
それはなぜだろうか?
INDEX | ||
[完全版]究極のC#プログラミング | ||
Chapter4 Findメソッド | ||
1.4.1 MATステートメントの思い出 | ||
2.4.2 ForEachメソッドのbreak問題 | ||
3.4.3 ForEachだけではない繰り返しメソッド | ||
4.4.4 複数の結果がほしい場合 | ||
5.4.5 偉大なる前進とは何か? | ||
6.4.6 そして、LINQへ続く/【Exercise】練習問題 | ||
「[完全版]究極の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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|