2011-05-10 6 views
1

정렬 된 일반 목록이 있습니다. 조건과 일치하는 처음 10 개를 반환하고 싶습니다. 아래의 방법 등을일치 항목 수를 반환하는 방법

종류 만 처음 10 개 항목을 다음과 같은

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

답변

8

뭔가 :

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

+1 잘하셨습니다! 좋은 생각 ... – Aliostad

+0

+1, 위임 범위를 사랑해야합니다. ;-) (그리고 까다롭게하지 말고,'delegate() {}'는 맞춤법 검사를해야합니다 .-) –

+0

+1 - 좋은 생각이지만, 신선한 마음으로는 대답하는 것보다 더 많은 질문을 던집니다. – YetAnotherUser

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를 사용할 수 있다는 것입니다 - 이상적으로 C#을 사용을 가능하면 .NET 2.0을 목표로 삼을 때도 있습니다. 그것은 당신의 삶을 훨씬 더 단순하게 만들 것입니다.

관련 문제