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();
}
您可以為方法、運算子、唯讀屬性、建構函式、完成項和屬性和索引子存取子建立運算式主體定義。 如需詳細資訊,請參閱運算式主體成員。
運算子是否可多載
無法多載 =>
運算子。