掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
使用Lambda表達(dá)式將會(huì)造成Lambda表達(dá)式主題部分的代碼重復(fù).

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)由有經(jīng)驗(yàn)的網(wǎng)站設(shè)計(jì)師、開發(fā)人員和項(xiàng)目經(jīng)理組成的專業(yè)建站團(tuán)隊(duì),負(fù)責(zé)網(wǎng)站視覺設(shè)計(jì)、用戶體驗(yàn)優(yōu)化、交互設(shè)計(jì)和前端開發(fā)等方面的工作,以確保網(wǎng)站外觀精美、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作易于使用并且具有良好的響應(yīng)性。
- var allEmployees = new List
() { - new Employee {
- EmployeeId = 1, Classification = 1, FirstName = "Skin", LastName = "Sen" } };
- var earlyFolks = from e in allEmployees
- where e.MonthlySalary < 4000 && e.Classification == 1 && e.YearsOfService > 20
- select e;
若每當(dāng)我們要獲取一次不同工薪階層的數(shù)據(jù).就要重復(fù)一次.相信久經(jīng)"高重用,松耦合"定律的你.肯定會(huì)想盡辦法將其實(shí)現(xiàn)高重用,松耦合.在以前方法調(diào)用的時(shí)代.可能你會(huì)將其提煉出
- private static bool LowPaidSalaried(Employee e, int salar)
- {
- return e.MonthlySalary < salar && e.Classification == 1;
- }
這樣,每次我們調(diào)用的時(shí)候,將大大減少代碼量,提高可復(fù)用性.
- var earlyFolks = from e in allEmployee
- where LowPaidSalaried(e, 4000) && e.YearsOfService > 20
- select e;
然而,很不幸的是.在這里.這種重構(gòu)的方式反倒降低了其可重用性.實(shí)際上,***種方法的可重用性比第二種方法更高些.為什么呢?明明已經(jīng)提煉出重用方法了.這與Lambda表達(dá)式的求值,解析以及最終的執(zhí)行方式有關(guān).
前面的<
難道,Lambda表達(dá)式就只能重復(fù)再重復(fù)了嗎?當(dāng)然不是.在這里.延遲執(zhí)行很好的將其作用發(fā)揮得淋漓精致.前面說過.延遲執(zhí)行保存的并不是值,而是獲取值的方法或者步驟.這樣,每次我們調(diào)用完"獲取"數(shù)據(jù)的方法.實(shí)際上.數(shù)據(jù)還沒獲得.得到的.只是一系列的"步驟".我們可以在步驟的的基礎(chǔ)上再添加步驟.這樣.就***的實(shí)現(xiàn)了Lambda下的重構(gòu).
- public static IQueryable
LowPaidSalaried(this IQueryable sequence) - {
- return from s in sequence
- where s.Classification == 1 && s.MonthlySalary < 4000
- select s;
- }var allEmployees = FindAllEmployees();
- var salaried = allEmployees.LowPaidSalaried();
這樣.只有在需要數(shù)據(jù)的時(shí)候,才會(huì)根據(jù)"步驟"得到相應(yīng)的數(shù)據(jù).對(duì)于IEnumerable
在復(fù)雜的查詢中服用Lambda表達(dá)式最有效的辦法就是封裝封閉泛型類型的查詢創(chuàng)建擴(kuò)展方法.通過包含Lambda表達(dá)式的小方法疊加"步驟".從而達(dá)到最有效的優(yōu)化.

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流