C#のラムダ式のサンプルです。
目次
仕組み | ラムダ式とは |
サンプル | 匿名メソッドからラムダ式に変更する |
戻り値なしの場合でAction型の変数を使用する | |
戻り値ありの場合でFunc型の変数を使用する |
ラムダ式とは
変数 = [データ型] 引数 [,データ型 引数]... -> メソッドの処理; |
変数 = [データ型] 引数 [,データ型 引数]... -> { メソッドの処理; return 値; }; |
- 矢印(->)の左側に引数を指定します。データ型は省略可能です。
- 矢印(->)の右側に引数を受け取って行うメソッドの処理を記述します。
- デリゲートに匿名メソッドを登録する代わりでラムダ式を使用します。
- 匿名メソッドをラムダ式に変更することができます。
- Action型またはFunc型の変数を使用する場合はデリゲートの宣言は不要です。
匿名メソッドからラムダ式に変更する
匿名メソッドからラムダ式に変更することができます。
1.匿名メソッド
using System;
delegate void delegate1(string name1);
class Test1
{
public static void Main()
{
delegate1 d1 = (string a) =>{ Console.WriteLine(a + "です");};
d1("青"); // 青です
}
}
9行目は、メソッド名がない匿名メソッドです。
2.ラムダ式
上記の匿名メソッドをラムダ式に変更したサンプルです。
using System;
delegate void delegate1(string name1);
class Test1
{
public static void Main()
{
delegate1 d1 = a => Console.WriteLine(a + "です");
d1("青"); // 青です
}
}
9行目がラムダ式です。デリゲートに匿名メソッドを登録しています。
矢印の左側のaが引数で、矢印の右側が引数を受け取って行う処理です。
戻り値なしの場合でAction型の変数を使用する
Action型の変数にセットする場合、デリゲートの宣言が不要になります。
戻り値なしの時に使用します。
Action型の変数で引数なし、戻り値なし
using System;
class Test1
{
public static void Main()
{
Action d1 = () => Console.WriteLine("こんにちは");
d1(); // こんにちは
}
}
7行目は、匿名メソッドで引数なしかつ戻り値なしです。
Action型の変数で引数あり、戻り値なし
using System;
class Test1
{
public static void Main()
{
Action<string> d1 = a => Console.WriteLine(a + "です");
d1("青"); // 青です
}
}
7行目は、匿名メソッドで引数ありで戻り値なしです。
このAction<string>のstringは引数のデータ型を指します。
戻り値ありの場合でFunc型の変数を使用する
Func型の変数にセットする場合、デリゲートの宣言が不要になります。
戻り値ありの時に使用します。
Func型の変数で引数なし、戻り値あり
using System;
class Test1
{
public static void Main()
{
Func<int> d1 = () => {
return 2 * 3;
};
Console.WriteLine(d1()); // 6
}
}
7行目は、匿名メソッドで引数なしで戻り値ありです。
このFunc<int>のintは戻り値のデータ型を指します。
Func型の変数で引数あり、戻り値あり
using System;
class Test1
{
public static void Main()
{
Func<int,int,int> d1 = (a,b) => {
return a * b;
};
Console.WriteLine(d1(2,3)); // 6
}
}
7行目は、匿名メソッドで引数ありで戻り値ありです。
このFunc<int,int,int>の最初のint2つは引数で、3つめは戻り値のデータ型を指します。
関連の記事