分享方式:


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

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

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# 語言規格匿名函式運算式一節。

另請參閱