分享方式:


Lambda 運算式 (=>) 運算子會定義 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 必須是 陳述式運算式。 因為運算式結果會捨棄,所以該運算式的傳回型別可以是任何型別。

下列範例顯示 Person.ToString 方法的運算式主體定義:

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

它是下列方法定義的簡短版:

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

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

運算子是否可多載

無法多載 => 運算子。

C# 語言規格

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

另請參閱