LoginSignup
0
3

More than 3 years have passed since last update.

C#学習 -ラムダ式-

Last updated at Posted at 2019-07-07

C#学習中のため、学習内容をメモしていく。
間違いやアドバイスがあればコメントからよろしくお願いします。

ラムダ式

メソッドの引数としてメソッドを引き渡すことができたりする。
匿名メソッドを短く、簡単にしたものをラムダ式という。

指定した文字列を[]で囲んで表示を行うプログラムを、匿名メソッド、ラムダ式の場合で表すと以下のようになる。

匿名メソッドの場合

    class Program
    {
        static void Main(string[] args)
        {
            var data = new[] {"あいうえお", "かきくけこ", "さしすせそ" };
            var lt = new Program();

            // 匿名メソッド
            lt.ArrayWalk(data, delegate (string d)
            {
                return $"[{d}]";
            });
        }

        void ArrayWalk(string[] data, Func<string, string> output)
        {
            foreach (var val in data)
            {
                Console.WriteLine(output(val));
            }
        }
    }

delegateキーワードを利用してメソッドを直接埋め込んでいる。

ラムダ式の場合

    class Program
    {
        static void Main(string[] args)
        {
            var data = new[] {"あいうえお", "かきくけこ", "さしすせそ" };
            var p = new Program();

            // ラムダ式
            p.ArrayWalk(data, (string d) =>
            {
                return $"[{d}]";
            });
        }

        void ArrayWalk(string[] data, Func<string, string> output)
        {
            foreach (var val in data)
            {
                Console.WriteLine(output(val));
            }
        }
    }

delegateキーワードの代わりに=>で引数とメソッドの本体をつないでいる。

ラムダ式は条件によりさらに簡素化することができる。

・メソッド本体が一文の場合{ }を省略可能
・式の戻りがそのまま戻り値と見なされるので、return命令を省略可能

            p.ArrayWalk(data, (string d) => $"[{d}]");

・引数の型は暗黙的に推論されるので、ラムダ式では省略可能

            p.ArrayWalk(data, (d) => $"[{d}]");

・引数が1個の場合は、引数をくくるカッコも省略可能
 ただし、引数がない場合はカッコの省略は不可

            p.ArrayWalk(data, d => $"[{d}]");

参考した本

独習C#

おわり。

0
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3