標籤:write nbsp 運算式 高品質 order sys strong 簡潔 改善
建議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運算式