C# 如何返回匹配项的计数

C# 如何返回匹配项的计数,c#,.net-2.0,C#,.net 2.0,我有一个分类的通用列表。我想返回符合条件的前10个 有点像下面的方法,但只有前10项 mySortedlist.FindAll(delegate(myclass tmp){ return tmp.ID == 123;}); 如下所示: int count = 0; mySortedlist.FindAll(delegate(myclass tmp){ return (tmp.ID == 123 && ++count <= 10);}); int count=0; m

我有一个分类的通用列表。我想返回符合条件的前10个

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

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

如下所示:

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

mySortedlist.FindAll(委托(myclass tmp){return(tmp.ID==123&&++count类似于以下内容:

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

mySortedlist.FindAll(delegate(myclass tmp){return(tmp.ID==123&&++count好的,这将返回一个列表。您可以创建自己的等价物
可枚举。非常容易地:

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;
        }
    }
}
公共静态IEnumerable Take(IEnumerable源代码,int-size)
{
整数计数=0;
foreach(源中的T项)
{
收益回报项目;
计数++;
如果(计数==大小)
{
屈服断裂;
}
}
}
然后您可以使用:

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

另一种选择是使用LINQ,这样你就可以尽可能多地使用LINQ——如果可能的话,最好是在你瞄准.NET 2.0的时候使用C#3。这会让你的生活变得更简单:)

好吧,这将返回一个列表。你可以创建自己的等价物
可枚举。非常容易地:

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;
        }
    }
}
公共静态IEnumerable Take(IEnumerable源代码,int-size)
{
整数计数=0;
foreach(源中的T项)
{
收益回报项目;
计数++;
如果(计数==大小)
{
屈服断裂;
}
}
}
然后您可以使用:

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

另一个选择是使用LINQ,这样你就可以尽可能多地使用LINQ——理想的情况是,即使在你瞄准.NET2.0的时候,如果可能的话,也可以使用C#3。这会让你的生活更简单:)

+1,必须热爱委托范围;-(而且,不要挑剔,
delegate(){}
需要进行拼写检查;-)+1-很好-但是对于一个新思维来说,它会提出比它回答的问题更多的问题。@Brad Haha,我只是复制粘贴了他的委托,我现在就更改它!我个人会尽量避免在这样的谓词中使用副作用。它很容易以意想不到的方式搞砸。+1,必须喜欢委托范围。-(而且,不要挑剔,
delegate(){}
需要进行拼写检查。;-+1-很好-但是对于一个新思维来说,这会提出比回答更多的问题。@Brad Haha,我刚刚复制粘贴了他的委托,我现在就更改它!我个人会尽量避免在这样的谓词中使用副作用。这很容易以意想不到的方式搞砸。