=> 運算子 (C# 參考)

=>標記的支援方式有兩種:做為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 # 6 開始支援方法、運算子和唯讀屬性的運算式主體定義。 從 c # 7.0 開始支援函式、完成項和屬性和索引子存取子的運算式主體定義。

如需詳細資訊,請參閱運算式主體成員

運算子是否可多載

無法多載 => 運算子。

C# 語言規格

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

另請參閱