第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【C#】小知識(shí)#6:Lambda + LINQ使用statement body(語(yǔ)句塊)不使用expression情況

標(biāo)簽:
C#

最近看到一个使用Lambda + LINQ不好的例子,举例:

资讯公司员工辛苦上市,尾牙特别奖赏员工

每人最起码发放10000奖金(dgmingkai)

假如入职满一年奖金+20000,满两年奖金+40000

因为信息部门KPI特别好,增加额外奖金+30000

以下是模拟他的写法,可以看到缺点

重复呼叫方法GetYearDif

每个条件写一个三元表达式,条件变多会难以维护

void Main()

{

//测试数据,实际上数据在Excel

var datas = new List<Employee>(){

new Employee{Name=“小明”,Department=Dep.信息部,EntryDate=DateTime.Parse(“2015/01/01”)},

new Employee{Name=“小华”,Department=Dep.信息部,EntryDate=DateTime.Parse(“2017/01/01”)},

new Employee{Name=“小新”,Department=Dep.业务部,EntryDate=DateTime.Parse(“2014/01/01”)}

};

NewYearBonusService.Excute(datas);

}

abstract class NewYearBonusService

{

private const decimal DefaultBonus = 10000;

public static void Excute(IEnumerable<Employee> datas)

{

datas.Select(s => new {Employee = s,bonus=

s.Department == Dep.信息部&& GetYearDif(DateTime.Now,s.EntryDate)>= 2?DefaultBonus + 30000 + 40000:

s.Department == Dep.信息部&& GetYearDif(DateTime.Now,s.EntryDate)>= 1?DefaultBonus + 30000 + 20000:

s.Department == Dep.信息部?DefaultBonus + 30000:

DefaultBonus

}).Dump();

}

private static int GetYearDif(DateTime d1,DateTime d2)

{

var dif =(int)((d2 - d1).TotalDays / 365);

if(dif < 0)dif *= -1;

return dif;

}

}

enum Dep{信息部,业务部}

class Employee{

public string Name { get;set;}

public Dep Department { get;set;}

public DateTime EntryDate { get;set;}

}

询问对方才发现他以为只能使用expression body,不知道可以使用statement body,在这个例子其实可以改成语句块作法,如以下示例:

1.可以加上if判断

2.宣告变数重复利用

3.甚至可以做简单防呆

abstract class NewYearBonusService

{

private const decimal DefaultBonus = 10000;

public static void Excute(IEnumerable<Employee> datas)

{

datas.Select(s =>


{

var bonus = DefaultBonus;

var yearDif = GetYearDif(DateTime.Now,s.EntryDate);

if(s == null)throw new Exception(“数据为空,请检查数据”);

if(s.Department == Dep.信息部)bonus+=30000;

if(yearDif>=2)bonus+=40000;else if(yearDif>=1)bonus+= 20000;

return new { Employee=s,bonus};

}

).Dump();

}

}

为什么可以这么方便?可以藉由反编译代码看到底层还是委托(delegate),只是系统帮我们生成而已(zflwx)。

补充

这是LINQ + Lambda才能使用的方法,单纯LINQ是不能简单套用

使用编辑器是LINQPAD,Dump()是里面的扩充方法,可以用Console.WriteLine取代

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消