1

我有代码:

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 表达式。

我不知道

4

3 回答 3

1
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));
于 2012-10-28T10:14:30.523 回答
0

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

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; 
于 2012-10-28T10:15:59.310 回答
0

关于什么:

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

    foreach(var item in result)
        DoStuff(item);
}
于 2012-10-28T10:16:58.690 回答