我正在尝试改进自己的代码。我是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表达式可以改进吗?
答案 0 :(得分:0)
我会用if
子句替换你的Where
语句:
foreach (var item in mlist.Where(i => !SomeClass.Validate(i) || i.Value == 0))
{
DoStuff(item);
...
}
根据这些功能的作用,它们也可以得到改进,但这是我从给出的内容中看到的唯一改进。
答案 1 :(得分:0)
使用lambda表达式可以改进吗?
不是真的。使用lambda表达式和LINQ改进了代码,使代码更容易理解。换句话说,如果代码最好被描述为声明性的,或者作为从一个空间到另一个空间的映射,LINQ和lambda表达式为您的代码提供了更强大的表达能力。
稍微更清晰地修改BrandleyDotNet的答案给出了:
var nonValidItems = mList.Where(item => !SomeClass.Validate(item) || item.Value == 0));
foreach (item in nonValidItems)
{
DoStuff(item);
}
但这对您的代码有帮助吗?不必要。对于这样的案例,LINQ的引入并没有提供更多的表达方式。
答案 2 :(得分:0)
由于这些方法之间只有很小一部分代码不同,您可以通过传入执行验证的lambda并删除一些冗余代码来使用lambdas;
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);
}
}