=> 演算子 (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. メンバーの戻り値の型が void の場合か、メンバーがコンストラクター、ファイナライザー、またはプロパティ set アクセサーの場合にのみ、ステートメント式になります。Note that expression can be a statement expression only if the member's return type is void, or if the member is a constructor, a finalizer, or a property set accessor.

次の例は、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