Mediator
Mediator

Reputation: 15378

How optimize this code use lambda expression

I have code:

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);
    }
}

how to organize these two methods?

they have a difference of only item.Value == 0 can use lambda expressions.

I have no idea

Upvotes: 1

Views: 549

Answers (3)

cuongle
cuongle

Reputation: 75316

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

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

So you can use:

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

Or:

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

Upvotes: 1

Omar
Omar

Reputation: 16623

What about:

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

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

Upvotes: 0

Hamlet Hakobyan
Hamlet Hakobyan

Reputation: 33381

If I understand what you need, then the code should look like this.

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; 

Upvotes: 0

Related Questions