=> 演算子 (C# リファレンス)=> operator (C# reference)

=> トークンは、ラムダ演算子、および式本体の定義におけるメンバー名とメンバー実装の区切り記号という 2 つの形式でサポートされています。The => token is supported in two forms: as the lambda operator and as a separator of a member name and the member implementation in an expression body definition.

ラムダ演算子Lambda operator

ラムダ式では、ラムダ演算子 => により、左側の入力変数と右側のラムダ本体とが分けられます。In lambda expressions, the lambda operator => separates the input variables on the left side from the lambda body on the right side.

次の例は、メソッド構文で LINQ 機能を使用して、ラムダ式の使用法を示しています。The following example uses the LINQ feature with method syntax to demonstrate the usage of lambda expressions:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 1, 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product);   // output: 280

ラムダ式の入力変数は、コンパイル時に厳密に型指定されます。Input variables of lambda expressions are strongly typed at compile time. 前の例のように、コンパイラが入力変数の型を推論できる場合は、省型宣言を略できます。When the compiler can infer the types of input variables, like in the preceding example, you may omit type declarations. 入力変数の型を指定する必要がある場合は、次の例に示すように、変数ごとに指定する必要があります。If you need to specify the type of input variables, you must do that for each variable, as the following example shows:

int[] numbers = { 1, 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

次の例は、入力変数を含まないラムダ式を定義する方法を示しています。The following example shows how to define a lambda expression without input variables:

Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

詳細については、「ラムダ式」を参照してください。For more information, see Lambda expressions.

式本体の定義Expression body definition

式本体の定義には、次の一般的な構文があります。An expression body definition has the following general syntax:

member => expression;

ここで、expression には有効な式を指定します。where expression is a valid expression. expression の戻り値の型は、メンバーの戻り値の型に暗黙的に変換可能である必要があります。The return type of expression must be implicitly convertible to the member's return type. メンバーの戻り値の型が void の場合や、メンバーがコンストラクター、ファイナライザー、またはプロパティ set のアクセサーの場合、expression"ステートメント式" である必要があります。この場合は任意の型を指定できます。If the member's return type is void or if the member is a constructor, a finalizer, or a property set accessor, expression must be a statement expression; it can be of any type then.

次の例は、Person.ToString メソッドの式本体の定義を示しています。The following example shows an expression body definition for a Person.ToString method:

public override string ToString() => $"{fname} {lname}".Trim();

これは、次のメソッド定義の短縮形バージョンです。It's a shorthand version of the following method definition:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

メソッドおよび読み取り専用プロパティの式本体の定義は、C# 6 以降でサポートされています。Expression body definitions for methods and read-only properties are supported starting with C# 6. コンストラクター、ファイナライザー、プロパティ アクセサー、およびインデクサーの式本体の定義は、C# 7.0 以降でサポートされています。Expression body definitions for constructors, finalizers, property accessors, and indexers are supported starting with C# 7.0.

詳細については、「式形式のメンバー」を参照してください。For more information, see Expression-bodied members.

演算子のオーバーロード可/不可Operator overloadability

=> 演算子はオーバーロードできません。The => operator cannot be overloaded.

C# 言語仕様C# language specification

詳細については、「C# 言語仕様」の無名関数の式に関するセクションを参照してください。For more information, see the Anonymous function expressions section of the C# language specification.

関連項目See also