相关文章推荐

支援兩種形式的 => 語彙基元:作為 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# 語言規格匿名函式運算式一節。

  • C# 參考資料
  • C# 運算子與運算式
  •  
    推荐文章