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来执行验证并删除一些冗余代码来使用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的引入并没有提供更多的表达方式。