Reputation: 15378
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
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
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
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