2010-03-09 3 views

ответ

13

Если у вас есть C# 3, используйте метод Take расширения:

var list = new [] {1, 2, 3, 4, 5}; 

var shortened = list.Take(3); 

См: http://msdn.microsoft.com/en-us/library/bb503062.aspx

Если у вас есть C# 2, вы можете написать эквивалент:

static IEnumerable<T> Take<T>(IEnumerable<T> source, int limit) 
{ 
    foreach (T item in source) 
    { 
     if (limit-- <= 0) 
      yield break; 

     yield return item; 
    } 
} 

только разница заключается в том, что он не является методом расширения:

var shortened = SomeClass.Take(list, 3); 
1

Вы можете с Linq

List<int> myList = new List<int>(); 

myList.Add(1); 
myList.Add(2); 
myList.Add(3); 
myList.Add(4); 
myList.Add(5); 
myList.Add(6); 

List<int> subList = myList.Take<int>(3).ToList<int>(); 
+0

На мой взгляд, многие дженерики могут быть выведены. –

+0

Это может быть упрощено для myList.Take (3) .ToList() для комментария @ Dave. – jrummell

7

Если у вас нет LINQ, попробуйте:

public List<int> GetFirstNElements(List<int> list, int n) 
{ 
    n = Math.Min(n, list.Count); 
    return list.GetRange(0, n); 
} 

в противном случае использовать Take.

1
var newList = List.Take(3); 
+0

Проверка длины не требуется. –

Смежные вопросы