Является ли массив String хорошей структурой для передачи коллекции значений из функции? - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть функция в приложении .NET, которая работает с коллекцией файлов и записывает некоторые файлы на диск. Я хочу вернуть коллекцию имен файлов, которые были записаны на диск. Все, что я собираюсь сделать с возвращенной коллекцией, это перебрать каждую из них и выполнить операцию над файлом. Сначала я думал, что массив String будет лучше в этом случае, но подумал, что я могу спросить здесь, если другая структура будет работать лучше. Например, будет ли LIST<String> избыточным, если я просто перебираю коллекцию? Я пишу функцию с использованием VB.NET, но примеры C # тоже подойдут. Благодаря.

Ответы [ 2 ]

5 голосов
/ 23 апреля 2011

Если все, что вам действительно нужно, это перебрать результаты, достаточно вернуть IEnumerable<string> из вашей функции.

Это предотвращает привязку вызывающего к любомуконкретная структура данных ... все, что им нужно, это что-то может быть повторено.Ваша реализация тогда может свободно использовать и возвращать любую структуру, которая имеет смысл - List<string>, HashSet<string>, string[] ... это на самом деле не имеет значения.На самом деле, вы можете создать структуру данных, отличную от простого списка, если вам так нужно - при условии, что он реализует интерфейс IEnumerable<string>, на который ваши абоненты не влияют.

Я думаю, что нужно рассмотреть другой вопрос:является ли массив хорошей структурой для внутреннего использования для создания набора имен файлов.Является ли коллекция фиксированного размера, но изменяемая, действительно лучшей конструкцией для вашей работы?Часто такие операции не знают, сколько элементов они будут обрабатывать - в этом случае имеет смысл иметь коллекцию переменного размера (например, List<> или HashSet<>).Зачем тогда нести расходы на преобразование такой коллекции в массив, чтобы просто ее вернуть?

2 голосов
/ 23 апреля 2011

Прямо из Руководства по проектированию рамок - Icaza и Hejlsberg

8.1 " Предпочитать использовать коллекции для массивов для публичных API"

8.3.3 " Предпочитать коллекций над массивом"

НО

" Рассмотрим использование массивов в низкоуровневых API для минимизации потребления памяти и максимальной производительности." (также часть 8.3.3)

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