Я предполагаю, что интервьюер, возможно, хотел спросить о проверке Any()
против Count() > 0
(в отличие от Length > 0
).
По сути, вот сделка.
Any()
будет эффективно пытаться определить, есть ли в коллекции какие-либо члены, путем перечисления по одному элементу. (Существует перегрузка для проверки заданного критерия с использованием Func<T, bool>
, но я предполагаю, что интервьюер ссылался на версию Any()
, которая не принимает аргументов.) Это делает его O (1).
Count()
сначала проверит свойство Length
или Count
(из T[]
или ICollection
или ICollection<T>
). Обычно это будет O (1). Однако, если это недоступно, он будет считать элементы в коллекции, перечисляя все это. Это будет O (n).
A Count
или Length
свойство , если оно доступно, скорее всего будет иметь значение O (1) точно так же, как Any()
, и, вероятно, будет работать лучше, поскольку вообще не потребует перечисления. Но метод расширения Count()
не гарантирует этого. Поэтому иногда это O (1), иногда O (n).
Предположительно, если вы имеете дело с невзрачным IEnumerable<T>
и не знаете, реализует ли он ICollection<T>
или нет, вам гораздо лучше использовать Any()
, чем Count() > 0
, если вы намерены просто убедиться, что коллекция не пуста .