В этом конкретном случае использование формы IEnumerable<T>
будет более эффективным, поскольку вам нужно только , чтобы узнать количество. Нет смысла хранить данные, изменять размеры буферов и т. Д., Если вам это не нужно.
Если по какой-либо причине вам понадобится снова использовать результаты, форма List<T>
будет более эффективной.
Обратите внимание, что метод расширения Count()
и свойство Count
будут эффективны для List<T>
, так как реализация Count()
проверяет, реализует ли целевая последовательность ICollection<T>
и использует ли свойство Count
если так.
Другой вариант, который должен быть даже более эффективным (хотя бы только), - вызвать перегрузку Count
, которая принимает делегата:
private int GetProviderCount(Type type)
{
return _objectProviders.Count(provider =>
(provider.Key.IsAssignableFrom(type)
|| type.IsAssignableFrom(provider.Key))
&& provider.Value.SupportsType(type));
}
Это позволит избежать дополнительного уровня косвенных указаний, возникающих в предложениях Where
и Select
.
(Как говорит Марк, для небольших объемов данных различия в производительности, вероятно, в любом случае будут незначительными.)