C#のラムダ式をもう一度復習
今ひとつラムダ式がわからなくてソースを読む時のハードルになっていた。苦手意識をなくしておきたいので改めて学び直してみる。
シンプルな記述
List型に文字列を追加してコンソールに出力する
static void Main(string[] args) { var list = new List<string>(); list.Add("test1"); list.Add("test2"); var result = new List<string>(); foreach(var s in list) { result.Add(s + ".txt"); } foreach (var n in result) { Console.WriteLine(n); } // test1.txt // test2.txt Console.ReadKey(); }
Linqのselectを使ってメソッドを渡す
foreachで回すのではなく、selectで一括処理する(ここ少し理解できていない)
static void Main(string[] args) { var list = new List<string>(); list.Add("test1"); list.Add("test2"); var result = list.Select(Append); foreach (var n in result) { Console.WriteLine(n); } // test1.txt // test2.txt Console.ReadKey(); } private static string Append(string s) { return s + ".txt"; }
小さなメソッドを作りたくない
わかる。Selectの中で無名のメソッドを作成する。
static void Main(string[] args) { var list = new List<string>(); list.Add("test1"); list.Add("test2"); var result = list.Select((string s) => { return s + ".txt"; }); foreach (var n in result) { Console.WriteLine(n); } // test1.txt // test2.txt Console.ReadKey(); }
ラムダ式の記述をシンプルにする
引数の型が推論できる場合は省略できる。また、メソッドが1文しかない場合は{}やreturnも省略できる。
// 省略前 var result = list.Select((string s) => { return s + ".txt"; }); // 引数の型を省略 var result = list.Select((s) => { return s + ".txt"; }); // returnと{}を省略 var result = list.Select((s) => s + ".txt"); // 引数が0の時は()を省略 var result = list.Select(s => s + ".txt");
わかったか?
なんとなくわかった、、、気がする、、、