Lambda 運算式 (=>) 運算子會定義 Lambda 運算式

令牌 => 支援兩種形式:作為 λ 運算子,以及在 運算式主體定義中,作為連接成員名稱與成員實作的分隔符。

C# 語言參考資料記錄了 C# 語言最新版本。 同時也包含即將推出語言版本公開預覽功能的初步文件。

文件中標示了語言最近三個版本或目前公開預覽版中首次引入的任何功能。

小提示

欲查詢某功能何時首次在 C# 中引入,請參閱 C# 語言版本歷史的條目。

Lambda 運算子

Lambda 運算式中,Lambda 運算符 => 會將左側的輸入參數與右側的 Lambda 主體分隔開來。

下列範例使用 LINQ 功能搭配方法語法來示範 Lambda 表達式的使用方式:

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

Lambda 表達式的輸入參數會在編譯階段進行強類型檢查。 當編譯器推斷輸入參數的類型時,如前例所示,你可以省略型別宣告。 如果你需要指定輸入參數的類型,必須為每個參數指定類型,如下範例所示:

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

下列範例示範如何定義不含輸入參數的 Lambda 運算式:

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

如需詳細資訊,請參閱 Lambda 運算式

表達式主體定義

表達式主體定義使用以下一般語法:

member => expression;

這是一個 expression 有效的表達式。 的 expression 傳回型別必須隱含轉換成成員的傳回型別。 如果成員:

  • 具有 void 回傳型別,或
  • 是:
    • 建構函式
    • 終結器
    • 屬性或索引器存取子set

expression 必須是 語句表達式。 因為表達式的結果會被捨棄,所以該表達式的傳回型別可以是任何類型。

下列範例顯示一個方法的運算式主體定義:

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

這是下列方法定義的速記版本:

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

您可以為方法、運算子、只讀屬性、建構函式、完成項和屬性和索引器存取子建立表達式主體定義。 如需詳細資訊,請參閱 表達式主體成員

運算子多載性

你不能讓操作員過載 =>

C# 語言規格

如需 Lambda 運算子的詳細資訊,請參閱 C# 語言規格匿名函式運算式一節。

另請參閱