Где использовать строку [] против списка <string>в C # - PullRequest
29 голосов
/ 18 января 2011

String[] - это легкий вес по сравнению с list<string>.Поэтому, если у меня нет необходимости манипулировать своей коллекцией, должен ли я использовать string[] или всегда целесообразно выбрать list<string>?

В случае list<string>, нужно линулевая проверка или не требуется?

Ответы [ 6 ]

39 голосов
/ 18 января 2011

Используйте string[], когда вам нужно работать со статическими массивами: вам не нужно добавлять и удалять элементы -> доступ только к элементам по индексу.Если вам нужно изменить коллекцию, используйте List<string>.И если вы намереваетесь только проходить по содержимому и никогда не получать доступ по индексу, используйте IEnumerable<string>.

8 голосов
/ 18 января 2011

Если коллекция не должна изменяться, используйте строку [] или, что еще лучше, IEnumerable<string>.Это указывает на то, что коллекцию строк следует рассматривать как коллекцию строк только для чтения.

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

4 голосов
/ 18 января 2011

Я бы сказал, что вы сами суммировали его.

Если размер вашего списка не изменится, и вам не нужны какие-либо дополнительные функции List, такие как сортировка, тогда String[] предпочтительнее, потому что, как вы говорите, он легкий.

Но рассмотрите потенциальные будущие требования - возможно ли, что однажды вы захотите использовать List для чего-то?Если это так, рассмотрите возможность использования списка прямо сейчас.

Вам необходимо проверить наличие нуля, как в строке [], так и в списке.Оба типа могут иметь нулевое значение.

2 голосов
/ 18 января 2011

Я бы сказал, это зависит от того, чего вы пытаетесь достичь. Как правило, однако, я считаю, что у вас есть доступ к отличной платформе, которая делает для вас большую тяжелую работу, поэтому используйте ее (т.е. используйте List <> вместо array).

Посмотрите на членов, предлагаемых вам таким классом, как List <>, и вы поймете, что я имею в виду: помимо того, что вам не нужно беспокоиться о емкости массива и индексировании за пределами исключений, List и другие классы ICollection / IList предоставляют вам бесконечно полезные методы, такие как Add, Remove, Clear, Insert, Find и т. д. Я тоже верю

myList.Add (myWidg);

намного приятнее читать и поддерживать, чем

myArr [i] = myWidg;
1 голос
/ 20 января 2011

Я бы определенно проголосовал за Список.Помимо различных функций-членов, которые поддерживает список, он предоставляет концепцию «без элемента».Может быть список, в котором нет элементов, но не может быть массива без элементов.Итак, если мы придерживаемся лучших практик не возвращать значение null из функции, то мы можем безопасно проверить количество элементов, не выполняя проверку nullВ случае массива мы должны проверить ноль.Более того, я редко использую цикл для поиска элемента в массиве или списке.LINQ просто делает его аккуратным, и мы можем использовать его со списком, а не с массивом.Для использования LINQ необходимо преобразовать массив в список.

1 голос
/ 18 января 2011

Это действительно зависит от ситуации. Все, что действительно связано с производительностью, должно быть сделано с массивами. Все остальное будет идти со списками.

...