【轉】編寫高質量代碼改善C#程序的157個建議——建議27:在查詢中使用Lambda表達式
阿新 • • 發佈:2017-11-30
with 代碼 esc red 工作 一行 derby 命名空間 any
建議27:在查詢中使用Lambda表達式
LINQ實際上是基於擴展方法和Lambda表達式的。任何LINQ查詢都能通過擴展方法的方式來代替。
var personWithCompanyList = from person in personList select new { PersonName = person.Name, CompanyName = person.CompanyID==0?"Micro":"Sun" }; foreach (var item in personWithCompanyList) { Console.WriteLine(item.ToString()); }
等價於:
foreach (var item in personList.Select(person=>new {PersonName=person.Name,CompanyName=person.CompanyID==0?"Micro":"Sun"})) { Console.WriteLine(item.ToString()); }
針對LINQ設計的擴展方法大多應用了泛型委托。System命名空間定義了泛型委托Action、Func和Predicate。Action用於執行一個操作,所以它沒有返回值;Func用於執行一個操作並返回一個值;Predicate用於定義一組條件並判讀參數是否符合條件。Select擴展方法接受的就是一個Func委托,而Lambda表達式就是一個簡潔的委托,運算符“=>”左邊代表的是方法的參數,右邊的是方法體。
我們通過直接調用擴展方法來使用Lambda表達式,這樣即完成了功能,也減少了一行代碼。在實際工作中,應該靈活運用這種方式。
foreach (var item in personWithCompanyList.Where(p=>p.CompanyName=="Sun")) { Console.WriteLine(item.PersonName); }
輸出:
Mike
Steve
調用OrderByDescending擴展方法,針對PersonName排序:
foreach (var item in personList.OrderByDescending(person=>person.Name)) { Console.WriteLine(item.Name); }
輸出:
Steve
Rose
Mike
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議27:在查詢中使用Lambda表達式