Чего не хватает в этой стратегии выбора коллекции C # для использования? - PullRequest
7 голосов
/ 09 августа 2010

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

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

    string [] directions = new string [] {"север", "юг", "восток", "запад"};

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 09 августа 2010

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

Кроме того:

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

и, конечно, самый важный:

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

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

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

1 голос
/ 09 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...