我有一个已排序的通用列表。我想返回符合条件的前10个。
有点像下面的方法,但只有前10个项目
mySortedlist.FindAll(delegate(myclass tmp){ return tmp.ID == 123;});
答案 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。它会让你的生活更简单:)