FROM ME TO YOU

oh my bizarre life !!

C#のラムダ式をもう一度復習

今ひとつラムダ式がわからなくてソースを読む時のハードルになっていた。苦手意識をなくしておきたいので改めて学び直してみる。

qiita.com

シンプルな記述

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"); 

わかったか?

なんとなくわかった、、、気がする、、、