Лучший контейнер для строк: StringCollection, Collection <string>, List <string>, ArrayList, ..? - PullRequest
30 голосов
/ 21 марта 2009

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

Для простого кода, например:

var list = new SomeContainer(); // size is unknown
for()/foreach()/do()/while() // any loop
{
  list.Add(string);
}

Это StringCollection как оптимизированный сборник для строки, или просто Collection<string> или List<string> или ArrayList? Чем они отличаются?

Ответы [ 2 ]

35 голосов
/ 21 марта 2009

Для того, что вам нужно, List<string>, пожалуй, самый универсальный. StringCollection был удобен в 1.1, когда (без обобщений) вам были нужны определенные классы для типизированных коллекций. Collection<string> удобно, если вы хотите создать подкласс для проверки и т. Д.

В любом случае, в 3.5 LINQ предоставит для них множество дополнительных методов - но без LINQ, List<T> имеет больше функций (Find, Sort и т. Д.)

15 голосов
/ 21 марта 2009

A List<T> будет наиболее эффективным.

Класс Collection<T> - это просто оболочка для списка другого типа, конструктор без параметров инициализирует Collection<T> с List<T>.

ArrayList по сути то же самое, что и List<object>, поэтому вы должны были бы привести предметы к String при чтении из него.

A StringCollection - это просто типобезопасная оболочка для ArrayList.

...