Рассмотрим следующий код:Вызывает ли счетчик на IEnumerable итерирование всей коллекции?
static IEnumerable<int> GetItems()
{
return Enumerable.Range(1, 10000000).ToArray(); // or: .ToList();
}
static void Main()
{
int count = GetItems().Count();
}
Будет ли итерацию по всем 10 миллиардов чисел и считать их один за одним, или он будет использовать массив в Length
/Листом Count
свойства?
Нет, 'Length' (в случае массива) или' Count' (в случае 'IList') будет использоваться –
См. Http://stackoverflow.com/questions/2521592/difference-between-ienumerable- count-and-length –
Вы можете найти реализацию самостоятельно :) http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,41ef9e39e54d0d0b –