前面複習了"隱式類型局部變數","擴充方法","對象和集合初始化器","匿名方法"知識點。見C# 3.0語言增強學習筆記(一)
這裡我們另外複習C# 3.0的其他新特性:Lambda運算式
初識Lambda運算式:
使用C# 2.0中的匿名方法尋找"內部包含abc子串的所有字串":
List.FindAll(
delegate(string s){
return s.Indexof("abc")>0}
)
使用C# 3.0中的Lambda運算式尋找"內部包含abc子串的所有字串":
List.FindAll(s=>s.IndexOf("abc")>0)
Lambda運算式簡介
為什麼Lambda運算式比匿名方法更好?
C# 2.0的匿名方法允許我們以內聯的方式來實現委託執行個體,而C# 3.0的Lambda運算式運行我們使用一種更接近人的思維,更自然的方式來實作類別似於匿名方法同樣的效果。
Lambda運算式格式
(參數列表)=>運算式或者語句塊
可以有多個參數,一個參數,或者無參數。參數類型可以隱式或者顯式。例如:
(x,y)=>x*y //多參數,隱式類型=>運算式
x=>x*10 //單參數,隱式類型=>運算式
x=>{return x*10} //單參數,隱式類型=>語句塊
(int x) => x*10 //單參數,顯式類型=>運算式
(int x) =>{return x*10} //單參數,顯示類型=>語句塊
()=>{Console.WriteLine()}//無參數
注意:
1.Lambda運算式的參數類型可以省略,因為可以根據使用上下文進行推測。
2.Lambda運算式的主體(body)可以是運算式,也可以是語句塊。
3.Lambda運算式傳入的實參將參與類型推斷,以及方法重載辨析。
4.Lambda運算式運算式和運算式體可以被轉換成運算式樹狀架構。
Lambda運算式與委託類型
Lambda運算式L可以被轉換成委託類型D,需要滿足以下條件:
1.L和D擁有相同的參數個數
2.L參數類型要與D參數類型相同。注意隱式類型要參與類型辨析。
3.D的傳回型別與L相同,無論L是運算式,還是語句塊。