我如何返回匹配项目的数量

时间:2011-05-10 20:19:32

标签: c# .net-2.0

我有一个已排序的通用列表。我想返回符合条件的前10个。

有点像下面的方法,但只有前10个项目

  mySortedlist.FindAll(delegate(myclass tmp){ return tmp.ID == 123;});

2 个答案:

答案 0 :(得分:8)

如下所示:

int count = 0;
mySortedlist.FindAll(delegate(myclass tmp){ return (tmp.ID == 123 && ++count <= 10);});

答案 1 :(得分:6)

那么,这将返回一个列表。您可以非常轻松地创建自己的等效Enumerable.Take

public static IEnumerable<T> Take<T>(IEnumerable<T> source, int size)
{
    int count = 0;
    foreach (T item in source)
    {
        yield return item;
        count++;
        if (count == size)
        {
            yield break;
        }
    }
}

然后你可以使用:

List<myclass> filtered =  mySortedlist.FindAll(delagate(myclass tmp) {
     return tmp.ID == 123;
});
List<myclass> list = new List<myclass>(Helper.Take(filtered, 10));

另一种选择是使用LINQBridge,这样你就可以尽可能地使用LINQ - 如果可能的话,即使你的目标是.NET 2.0,理想情况下也要使用C#3。它会让你的生活更简单:)