Lambda表达式改进了代码编写
本文关键字:代码 表达式 Lambda | 更新日期: 2023-09-27 18:14:53
我正在努力改进自己的代码。我是lambda表达式的新手。我的代码:
protected void Process1(List<SomeClass>mylist)
{
foreach(var item in mylist)
{
if (!SomeClass.Validate(item))
{
continue;
}
DoStuff(item);
DoMoreStuff(item);
DoEvenMoreStuff(item);
}
}
protected void Process2(List<SomeClass>mylist)
{
foreach(var item in mylist)
{
if (!SomeClass.Validate(item) || item.Value == 0)
{
continue;
}
DoStuff(item);
DoMoreStuff(item);
DoEvenMoreStuff(item);
}
}
可以通过使用lambda表达式来改进吗?
由于方法之间只有非常小的一部分代码不同,因此您可以通过传入lambda来执行验证并删除一些冗余代码来使用lambda;
protected void Process1(List<SomeClass>mylist) {
Process (mylist, item => !SomeClass.Validate (item));
}
protected void Process2(List<SomeClass>mylist) {
Process (mylist, item => !SomeClass.Validate (item) || item.Value == 0);
}
private void Process(List<SomeClass>mylist, Func<SomeClass, bool> validator)
{
foreach (var item in mylist) {
if (validator (item)) {
continue;
}
DoStuff (item);
DoMoreStuff (item);
DoEvenMoreStuff (item);
}
}
我会用Where
子句替换您的if
语句:
foreach (var item in mlist.Where(i => !SomeClass.Validate(i) || i.Value == 0))
{
DoStuff(item);
...
}
根据这些函数的功能,它们也可以得到改进,但这是我看到的唯一改进。
可以通过使用lambda表达式来改进吗?
没有。当lambda表达式和LINQ使代码更容易理解时,代码得到了改进。换句话说,如果最好将代码描述为声明性的,或者作为从一个空间到另一个空间的映射,那么LINQ和lambda表达式将为代码提供更强的表达能力。
修改BrandleyDotNet的答案,使其更清晰:
var nonValidItems = mList.Where(item => !SomeClass.Validate(item) || item.Value == 0));
foreach (item in nonValidItems)
{
DoStuff(item);
}
但是这真的对你的代码有帮助吗?不一定。对于这种情况,LINQ的引入并没有提供更多的表达方式。