『究極のC#プログラミング』 Chapter7 ラムダ式 後編
式形式のラムダ式と、ステートメント形式のラムダ式
// 式形式 (引数リスト) => 内容 // ステートメント形式 (引数リスト) => { 内容 }
式形式で書けない場合もあるので、ステートメント形式も必要
式形式で書けない原因として、C/C++で存在するカンマ演算子が存在しない点がある。
簡単なif文なら、null合体演算子(??)や条件演算子(?:)で置き換え可能である。
注意点として、条件演算子の第二第三の項にvoidを返すメソッド呼び出しは書けない。
型指定の省略
たいていはラムダ式の引数の型は省略できる
省略できないこともある。
例えば、引数の異なるデリゲート型d1, d2をそれぞれ引数とする、メソッドSampleが2つあるとする。
この時に、Sampleメソッドの呼び出し側で、与えるラムダ式の引数の型を省略するとエラーになる。
varで宣言された変数にラムダ式を代入できない
Anyメソッド
コレクションのAnyメソッドは、
Func<int, bool>
なpredicateを渡すことで、指定条件の要素を含むか判別できる。
// "0を含みます"と出力される int[] a = { 0, 1, 2 }; if (a.Any((x) => x == 0)) // ラムダ式を渡す。x => x == 0と書いても同じ { Console.WriteLine("0を含みます"); }
Whereメソッド
LINQのWhereメソッドを使うと、指定条件の要素だけ抜き出せる。
戻り値は、列挙子である。
int[] a = { 0, 1, 2, 3 }; IEnumerable<int> query = a.Where(x => x < 2); foreach (int n in query) { Console.WriteLine(n); }
0 1