支援兩種形式的
=>
語彙基元:作為
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# 運算子與運算式