Подтвердить что ты не робот

Следует ли избегать Count() IEnumerable?

В общем, я использую List, а затем возвращаю их как IEnumerable, когда мне больше не нужно их обновлять.

Однако я столкнулся с проблемой, когда мне действительно нужно перечислить их, но сначала нужно знать счет.

Будет ли IEnumerable перечислить каждый элемент и найти счетчик (O (N)) или будет полагаться на свойство List Count (O (1))?

Кроме того, что, если IEnumerable является результатом запроса LINQ?

4b9b3361

Ответ 1

Будет ли IEnumerable перечислять каждый элемент и находить счетчик (O (N)) или он будет полагаться на свойство Count Count (O (1))?

Он будет использовать свойство Count. В основном реализация проверяет, реализует ли объект ICollection<T> или ICollection, и вызывает соответствующее свойство Count, если это так. (Использование не-generic ICollection было введено только в .NET 4; в .NET 3.5 он заметил только ICollection<T>.)

Только документально для ICollection<T>, однако:

Если тип источника реализует ICollection<T>, эта реализация используется для получения количества элементов. В противном случае этот метод определяет счетчик.