四 lambda表示式
msdn中的描述:
在 2.0 之前的 c# 版本中,宣告委託的唯一方法是使用命名方法。c# 2.0 引入了匿名方法,而在 c# 3.0 及更高版本中,lambda 表示式取代了匿名方法,作為編寫內聯**的首選方式。使用最多的地方還是在linq。表現為 「=>」 符號,念 goes to.
同一種函式兩種表達方式來描述什麼叫lambda:
lambda表示式
var results = people.where(p=>p.lastname == "white");
匿名函式來實現
var results1 = people.where(
delegate(person p)
);
表現形式為:
(input parameters) => expression
(x, y) => x == y
(int x, string s) => s.length > x
() => somemethod()
左邊為引數,如果沒有留空。可以寫入引數型別。
右邊可以用花括號括起來,如果內容比較多的話。這樣的話就叫lambda語句。注意語句數量不應該太多。
lambda 表示式中的變數範圍
先意會觀察一下lambda使用「外部變數」
delegatebool d();
delegatebool d2(int i);
class test
;
// del2 will be invoked after testmethod goes out of scope.
del2 = (x) => ;
// demonstrate value of j:
// output: j = 0
// the delegate has not been invoked yet.
console.writeline("j = ", j);
// invoke the delegate.
bool boolresult = del();
// output: j = 10 b = true
console.writeline("j = . b = ", j, boolresult);
}
staticvoid main()
}
儲存通過這種方法捕獲的變數以供在 lambda 表示式中使用,即使變數將以其他方式超出範圍或被作為垃圾**。這句話需要在實踐中體會一下
五 查詢關鍵字
這方面其實就是linq了,觀察乙個表示式理解一下:
class linqqueryexpressions
;
// define the query expression.
ienumerable scorequery =
from score in scores
where score > 80
select score;
// execute the query.
foreach (int i in scorequery)
}
}
// output: 97 92 81
只要是實現了ienumerable介面的都可以以這種方式搜尋結果。
這裡點到為止,具體深入討論將會再開啟乙個系列。
回顧C 3 0新特性 2
三 擴充套件方法 讓我想起了設計模式中的裝飾器 decorator 我將在 c 3.0設計模式 的閱讀筆記中描述 其實.net內部很多方法已經是擴充套件方法了。看圖示,普通的方法圖示下帶乙個箭號的。上圖就是linq的截圖。擴充套件方法使您能夠向現有型別 新增 方法,而無需建立新的派生型別 重新編譯或...
C 3 0 新特性概覽
自從看了scottgu的幾篇文章後就有想讓c 3.0的一些新特性在我的部落格上也留下歷史地一頁。但是由於環境不允許好久都沒有用上.net 3.0,今天終於忍不住地要動一動鍵盤滿足一下自己的慾望,因為我自己的電腦上安裝了.net 3.0 framework sdk。在這裡我總結一下前輩們的研究成果,也...
C 3 0 新特性概覽
1.visual c 3.0 新特性概覽 在發布visual studio 2005和c 2.0之後,微軟公司又馬不停蹄的展示了人們所期望的c 的下一代版本 c 3.0。儘管c 3.0並沒有標準化,微軟還是在pdc 專業程式設計師會議 發布了乙個預覽版本,因此心急的程式設計師可以看到一些所期望的特性...