日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【More Effective C#】Lambda表达式优化

發(fā)布時間:2025/1/21 C# 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【More Effective C#】Lambda表达式优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【More Effective C#】Lambda表達式優(yōu)化

2010-10-19 08:09 by 空逸云, 2923 閱讀,?38?評論,?收藏,?編輯

使用Lambda表達式將會造成Lambda表達式主題部分的代碼重復.

var allEmployees = new List<Employee>() { new Employee { EmployeeId = 1, Classification = 1, FirstName = "Skin", LastName = "Sen" } };var earlyFolks = from e in allEmployeeswhere e.MonthlySalary < 4000 && e.Classification == 1 && e.YearsOfService > 20select e;

若每當我們要獲取一次不同工薪階層的數據.就要重復一次.相信久經"高重用,松耦合"定律的你.肯定會想盡辦法將其實現高重用,松耦合.在以前方法調用的時代.可能你會將其提煉出

private static bool LowPaidSalaried(Employee e, int salar){return e.MonthlySalary < salar && e.Classification == 1;}

這樣,每次我們調用的時候,將大大減少代碼量,提高可復用性.

var earlyFolks = from e in allEmployeewhere LowPaidSalaried(e, 4000) && e.YearsOfService > 20select e;

然而,很不幸的是.在這里.這種重構的方式反倒降低了其可重用性.實際上,第一種方法的可重用性比第二種方法更高些.為什么呢?明明已經提煉出重用方法了.這與Lambda表達式的求值,解析以及最終的執(zhí)行方式有關.

????????? 前面的<<LINQ表達式與方法調用的映射>>里說過.編譯器會根據不同的LINQ Provider將Lambda表達式轉換成不同的內容來執(zhí)行.對于LINQ to Object.將轉換成委托方法.而LINQ to SQL則是轉換成表達式數.在數據迭代時才會轉換成SQL語句執(zhí)行.所以.若我們是在LINQ2SQL或ADO.Net EF中如此重構.編譯期通過了.但運行時將出錯.因為無法將你的自定義方法轉換成相關的SQL語句.,因此.將拋出一個異常.

?????? 難道,Lambda表達式就只能重復再重復了嗎?當然不是.在這里.延遲執(zhí)行很好的將其作用發(fā)揮得淋漓精致.前面說過.延遲執(zhí)行保存的并不是值,而是獲取值的方法或者步驟.這樣,每次我們調用完"獲取"數據的方法.實際上.數據還沒獲得.得到的.只是一系列的"步驟".我們可以在步驟的的基礎上再添加步驟.這樣.就完美的實現了Lambda下的重構.

public static IQueryable<Employee> LowPaidSalaried(this IQueryable<Employee> sequence){return from s in sequencewhere s.Classification == 1 && s.MonthlySalary < 4000select s;} var allEmployees = FindAllEmployees();var salaried = allEmployees.LowPaidSalaried();

這樣.只有在需要數據的時候,才會根據"步驟"得到相應的數據.對于IEnumerable<T>,我們可以使用yield return來返回序列.

在復雜的查詢中服用Lambda表達式最有效的辦法就是封裝封閉泛型類型的查詢創(chuàng)建擴展方法.通過包含Lambda表達式的小方法疊加"步驟".從而達到最有效的優(yōu)化.

作者:空逸云
出處:http://kongyiyun.cnblogs.com?
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

轉載于:https://www.cnblogs.com/ppcompany/articles/2701952.html

總結

以上是生活随笔為你收集整理的【More Effective C#】Lambda表达式优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。