Мой код завален коллекциями - я полагаю, это не что-то необычное.Однако использование различных типов коллекций не является ни очевидным, ни тривиальным.Как правило, я хотел бы использовать тип, который предоставляет «лучший» API и имеет наименьший синтаксический шум.(См. Рекомендации по возврату массива значений , Использование списочных массивов - Рекомендации для сопоставимых вопросов).Существуют рекомендации, предлагающие, какие типы использовать в API , но они нецелесообразны в обычном (не API) коде.
Например:
new ReadOnlyCollection<Tuple<string,int>>(
new List<Tuple<string,int>> {
Tuple.Create("abc",3),
Tuple.Create("def",37)
}
)
List
- это очень распространенная структура данных, но создание их таким образом включает в себя довольно много синтаксического шума - и это может легко ухудшиться (например, словари).Оказывается, многие списки никогда не меняются или, по крайней мере, никогда не расширяются.Конечно, ReadOnlyCollection
вводит еще больше синтаксического шума, и он даже не передает, что я имею в виду;В конце концов ReadOnlyCollection
может обернуть мутирующую коллекцию .Иногда я использую массив внутри и возвращаю IEnumerable
, чтобы указать намерение.Но большинство из этих подходов имеют очень низкое отношение сигнал / шум;и это абсолютно важно для понимания кода.
Для 99% всего кода, который является , а не публичным API, нет необходимости следовать Framework Guidelines: однако, я все еще нужен понятный код и тип, сообщающий о намерениях.
Итак, каков наилучший способ справиться со стандартной для болота задачей создания небольших коллекций для передачи значений? Должен ли массив быть более предпочтительным, чем List
где это возможно?Что-то еще целиком?Какой лучший способ - чистый, читаемый, достаточно эффективный - обойти такие маленькие коллекции?В частности, код должен быть очевидным для будущих сопровождающих, что не не читают этот вопрос и не хотят читать наборы документов API, но все еще понимают, в чем заключается цель.Также очень важно минимизировать помехи кода - поэтому такие вещи, как ReadOnlyCollection
, в лучшем случае сомнительны.Нет ничего плохого в многословных типах для основных API с небольшими поверхностями, но не в качестве общей практики в большой кодовой базе.
Каков наилучший способ передачи списков значений без большого количества беспорядка кода (такого как явные параметры типа)) но это все еще ясно говорит о намерениях?
Редактировать: пояснил, что речь идет о создании короткого, ясного кода, а не об открытых API.