C# => 運算符


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 起,支持構造函數、終結器、屬性和索引器訪問器的表達式主體定義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM