Collection<T>
реализован, IIRC, как оболочка вокруг IList<T>
, из которых реализация по умолчанию - List<T>
. Следовательно, у Collection<T>
есть по крайней мере еще одна абстракция, чем у List<T>
, но в целом это не будет узким местом. На самом деле, вы можете рассмотреть возможность возврата IList<T>
.
Редактировать: вот конструктор Collection<T>
, предоставлено отражателем:
public Collection()
{
this.items = new List<T>();
}
так что действительно, это оборачивает слой абстракции. Плюс плюс в том, что вы можете добавить свою собственную валидацию и т. Д. Путем подкласса Collection<T>
(что невозможно при использовании List<T>
напрямую или с помощью подклассов, поскольку нет интересных virtual
методов) .
Еще одна вещь, которую следует учитывать, это то, что они будут иметь одинаковую общую производительность в терминах «O» (при условии, что вы используете реализацию List<T>
по умолчанию). Индексный поиск будет O(1)
и т. Д.