程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#3.0匿名方法的實現與應用(3)

C#3.0匿名方法的實現與應用(3)

編輯:關於C語言
) Lambda表達式

前面提到在C#2.0中,我們用一個delegate關鍵字匿名地調用了一個委托方法,簡化了程序員的工作,但同時我們也發覺程序的可讀性降低了不少。下面我用一個例子來說明Lambda表達式是如何增強代碼的可讀性的。

還是以上面的UserInfo查詢作為例子,下面的代碼同樣取出年齡在20-35之間的用戶群。

var result1 = infoList.FindAll(p => (p.age > 20 && p.age < 35));

這裡僅僅只用了一行代碼就完成了查詢,是不是很神奇呢!我們來分析一下這句話的語義:首先是調用了infoList的FindAll方法,這個方法的原型如下:

// Summary:
// Retrieves all the elements that match the conditions defined by the specifIEd predicate.
//
// Parameters:
// match:
// The System.Predicate<T> delegate that defines the conditions of the elements
// to search for.
//
public List<T> FindAll(Predicate<T> match);

由於篇幅原因,我刪掉一部分注解,大家可以注意到它的參數Predicate<T>毫無疑問是一個委托類型,這就證明了我們前面所說的Lambda表達式確實是一個委托的簡化。接著在參數中第一個字母是p,指示了我們返回的數據,這裡編譯器可以通過前面infoList的類型判斷出p的類型來。下面是指示符”=>”,表示返回的數據集合要符合後面的查詢條件。

這裡再舉一個復雜一點的例子加以說明:

var groupBooksNumAndClicks =
from book in books.Tbl_books
from type in books.Tbl_types
where book.Type_id == type.Id
group book by type.Name into g
select new { type = g.Key, booksSum = g.Count(), clicksSum = g.Sum(p => p.Clicks) };

如果大家還有印象的話,這是我以前在介紹LINQ語言時寫的一個數據庫查詢的例子,Tbl_books這張表包含了書籍的所有信息(書名,價格,等等),Tbl_types這張表包含了所有的書籍目錄(比如數學類,計算機類等等), 我們要取出相同類別的書籍並計算每一類書籍總的點擊量,有興趣的朋友可以自行研究一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved