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

これらの2つの方法を整理する方法は?

item.Value == 0ラムダ式のみを使用できるという違いがあります。

何も思いつきません

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 に答える