В .NET 3.5 каноническим ответом будет использование Take
. К счастью, вы можете написать это очень легко для .NET 2.0:
public static IEnumerable<T> Take<T>(IEnumerable<T> source, int limit)
{
// Error checking omitted
using (IEnumerator<T> iterator = source.GetEnumerator())
{
for (int i = 0; i < limit; i++)
{
if (!iterator.MoveNext())
{
yield break;
}
yield return iterator.Current;
}
}
}
Тогда вы можете сделать:
foreach (SimplifiedFeedItem item in Take(allFeeds, 6))
{
// Do stuff
}
В качестве альтернативы, вы можете просто получить LINQBridge и получить доступ к целому LINQ to Objects ...
Преимущество такого подхода состоит в том, что когда вы в конечном итоге перейдете на .NET 3.5 или более позднюю версию, у вас будет решение, которое можно легко превратить в идиоматический LINQ:
foreach (SimplifiedFeedItem item in allFeeds.Take(6))
Обратите внимание, что проверка ошибок с блоками итератора немного сложна - вам нужно написать «обычный» метод, который выполняет проверку аргументов, а затем вызвать итератор отдельно; в противном случае исключение не будет выброшено, пока вы не начнете выполнять итерации.