Чего не хватает в этой стратегии выбора используемой коллекции C#?

Вот моя стратегия выбора используемого типа коллекции C#:

  • если количество элементов в коллекции фиксировано, используйте массив, например:

    строка[] направления = новая строка[] { "север", "юг", "восток", "запад" };

  • в противном случае всегда используйте List<T>

  • если, конечно, вам не нужна более специализированная коллекция, например. Stack<T>, Queue<T>, or Dictionary<TKey, TValue>

  • но никогда больше не используйте ArrayList

Исходя из вашего опыта, чего не хватает в этой стратегии?


person Community    schedule 08.08.2010    source источник
comment
Не совсем уверен, почему это вики сообщества?   -  person Fiona - myaccessible.website    schedule 09.08.2010
comment
Я подумал, что это хороший этикет — помечать вопросы-мнения как вики сообщества. На самом деле нет конкретного ответа на этот вопрос, я просто хочу изложить свою стратегию и посмотреть, основываясь на опыте других, если чего-то не хватает, что я должен знать.   -  person Edward Tanguay    schedule 09.08.2010
comment
Я считаю, что если есть явно неправильные ответы, это не место для вики сообщества.   -  person Steven Sudit    schedule 09.08.2010
comment
к сожалению, отменить вики сообщества невозможно: meta.stackexchange.com/questions/6821/   -  person Edward Tanguay    schedule 09.08.2010
comment
Я практически никогда не использую массивы (T[]) — List<T> используется по умолчанию даже для коллекций фиксированного размера.   -  person Timothy Shields    schedule 21.04.2013


Ответы (3)


Ваши правила работают нормально.

Кроме того:

  • Всегда отдавайте предпочтение универсальным (или специализированным) коллекциям, а не неуниверсальным (на основе object).
  • Используйте HashSet<T>, если вы хотите проверить простое существование вместо сопоставления ключ-значение (которое представлено через Dictionary).
  • В случае со словарями рассмотрите возможность использования упорядоченных карт (SortedList<...>, SortedDictionary<...>), если порядок кажется важным.
  • Используйте связанные списки, если у вас есть операции удаления/вставки посередине.

и конечно самое главное:

  • Никогда не экспортируйте конкретные типы коллекций: всегда используйте самый общий интерфейс, который в большинстве случаев - IList<T> или IEnumerable<T>.
person Community    schedule 08.08.2010

Я бы сказал, что в большинстве случаев, даже если бы я знал количество элементов в коллекции, я бы использовал список просто из-за количества предоставляемых им служебных функций и совместимости с LINQ.

Хеш-карты — важный вариант использования, когда вам нужен более быстрый доступ к элементам в коллекции.

person Community    schedule 08.08.2010

Вы также можете использовать Collection<T>, если вы планируете переопределить методы добавления/удаления/очистки в унаследованном классе, поскольку существуют виртуальные методы.

person Community    schedule 09.08.2010