ラムダ式 (=>
) 演算子はラムダ式を定義する
=>
トークンは、ラムダ演算子、および式本体の定義におけるメンバー名とメンバー実装の区切り記号という 2 つの形式でサポートされています。
ラムダ演算子
ラムダ式では、ラムダ演算子 =>
により、左側の入力パラメーターと右側のラムダ本体とが分けられます。
次の例は、メソッド構文で LINQ 機能を使用して、ラムダ式の使用法を示しています。
string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
.Where(w => w.StartsWith("a"))
.Min(w => w.Length);
Console.WriteLine(minimalLength); // output: 5
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product); // output: 280
ラムダ式の入力パラメーターは、コンパイル時に厳密に型指定されます。 前の例のように、コンパイラが入力パラメーターの型を推論できる場合は、型宣言を省略できます。 入力パラメーターの型を指定する必要がある場合は、次の例に示すように、パラメーターごとに指定する必要があります。
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
次の例は、入力パラメーターを含まないラムダ式を定義する方法を示しています。
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
詳細については、「ラムダ式」を参照してください。
式本体の定義
式本体の定義には、次の一般的な構文があります。
member => expression;
ここで、expression
には有効な式を指定します。 expression
の戻り値の型は、メンバーの戻り値の型に暗黙的に変換可能である必要があります。 メンバーが次の場合:
- 戻り値の型が
void
であるか、または - 次のようになります。
- コンストラクター
- ファイナライザー
- プロパティまたはインデクサー
set
アクセサー
expression
は "ステートメント式" である必要があります。 式の結果が破棄されるため、その式の戻り値の型は任意の型にすることができます。
次の例は、Person.ToString
メソッドの式本体の定義を示しています。
public override string ToString() => $"{fname} {lname}".Trim();
これは、次のメソッド定義の短縮形バージョンです。
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
式本体の定義は、メソッド、演算子、読み取り専用プロパティ、コンストラクター、ファイナライザー、プロパティおよびインデクサー アクセサーに作成できます。 詳細については、「式形式のメンバー」を参照してください。
演算子のオーバーロード可/不可
=>
演算子はオーバーロードできません。
C# 言語仕様
ラムダ演算子の詳細については、「C# 言語仕様」の匿名関数の式に関するセクションを参照してください。
関連項目
.NET