繁体   English   中英

如何使用lambda表达式优化此代码

[英]How optimize this code use lambda expression

我有代码:

protected void Method1(List<SomeClass> mylist)
{
    foreach(var item in mylist)
    {
        if (!SomeClass.Validate(item))
        {
            continue;
        }
        DoStuff(item);
    }
}

protected void Method2(List<SomeClass> mylist)
{
    foreach(var item in mylist)
    {
        if (!SomeClass.Validate(item) || item.Value == 0)
        {
            continue;
        }
        DoStuff(item);
    }
}

如何组织这两种方法?

它们的区别仅item.Value == 0可以使用lambda表达式。

我不知道

protected void Method(List<SomeClass> mylist, Func<SomeClass, bool> filter)
{
    var selectedItem = mylist.Where(filter);

    foreach (var item in selectedItem)
        DoStuff(item);
}

因此,您可以使用:

Method(mylist, item => (SomeClass.Validate(item) && item.Value != 0));

要么:

Method(mylist, item => SomeClass.Validate(item));

如果我了解您的需求,那么代码应如下所示。

protected void CommonMethod(List<SomeClass> mylist, Func<SomeClass, bool> predicate)
{
    foreach(var item in mylist)
    {
        if (predicate(item))
        {
            continue;
        }
        DoStuff(item);
    }
}

Func<SomeClass, bool> method1Predicate = (SomeClass item) => !SomeClass.Validate(item); 
Func<SomeClass, bool> method2Predicate = (SomeClass item) => !SomeClass.Validate(item) || item.Value == 0; 

关于什么:

protected void Method<T>(List<T> mylist, Func<T, bool> predicate)
{
    var result = mylist.Where(predicate);   

    foreach(var item in result)
        DoStuff(item);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM