lambda 運算符
在 lambda 表達式中,lambda 運算符 =>
將左側的輸入參數與右側的 lambda 主體分開。
以下示例使用帶有方法語法的 LINQ 功能來演示 lambda 表達式的用法:
1 string[] words = { "bot", "apple", "apricot" }; 2 int minimalLength = words 3 .Where(w => w.StartsWith("a")) 4 .Min(w => w.Length); 5 Console.WriteLine(minimalLength); // output: 5
6
7 int[] numbers = { 1, 4, 7, 10 }; 8 int product = numbers.Aggregate(1, (interim, next) => interim * next); 9 Console.WriteLine(product); // output: 280
lambda 表達式的輸入參數在編譯時是強類型。
當編譯器可以推斷輸入參數的類型時,如前面的示例所示,可以省略類型聲明。
如果需要指定輸入參數的類型,則必須對每個參數執行類型聲明,如以下示例所示:
1 int[] numbers = { 1, 4, 7, 10 }; 2 int product = numbers.Aggregate(1, (int interim, int next) => interim * next); 3 Console.WriteLine(product); // output: 280
以下示例顯示如何在沒有輸入參數的情況下定義 lambda 表達式:
1 Func<string> greet = () => "Hello, World!"; 2 Console.WriteLine(greet());
表達式主體定義
表達式主體定義具有下列常規語法:
member => expression;
其中 expression
是有效的表達式。
expression
的返回類型必須可隱式轉換為成員的返回類型。
如果成員的返回類型是 void
,或者如果成員是構造函數、終結器或屬性 set
訪問器,則 expression
必須是語句表達式,其可以是任意類型 。
以下示例演示了用於 Person.ToString
方法的表達式主體定義:
public override string ToString() => $"{fname} {lname}".Trim();
它是以下方法定義的簡寫版:
1 public override string ToString() 2 { 3 return $"{fname} {lname}".Trim(); 4 }
自 C#6 起,支持方法、運算符和只讀屬性的表達式主體定義。 自 C# 7.0 起,支持構造函數、終結器、屬性和索引器訪問器的表達式主體定義。