Список строк в одну строку - PullRequest
188 голосов
/ 25 ноября 2008

Допустим, у вас есть:

List<string> los = new List<string>();

В этом сумасшедшем функциональном мире, в котором мы живем в эти дни, один из них был бы лучшим для создания одной строки, объединяя их:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

или простой старый StringBuilder foreach

ИЛИ есть ли лучший способ?

Ответы [ 6 ]

265 голосов
/ 25 ноября 2008

Я бы выбрал вариант А:

String.Join(String.Empty, los.ToArray());

Я рассуждаю так, потому что метод Join был написан для этой цели. Фактически, если вы посмотрите на Reflector, вы увидите, что небезопасный код был использован для его реальной оптимизации. Два других также РАБОТАЮТ, но я думаю, что функция Join была написана для этой цели, и я думаю, наиболее эффективная. Хотя я могу ошибаться ...

Согласно @Nuri YILMAZ без .ToArray(), но это .NET 4 +:

String.Join(String.Empty, los);
49 голосов
/ 26 ноября 2008
string.Concat(los.ToArray());

Если вы просто хотите объединить строки, используйте string.Concat () вместо string.Join ().

16 голосов
/ 13 сентября 2011

Если вы используете .net 4.0, вы можете использовать сортировщик:

String.Join<string>(String.Empty, los);
8 голосов
/ 25 ноября 2008

String.Join () реализован довольно быстро, и, поскольку у вас уже есть коллекция рассматриваемых строк, вероятно, это лучший выбор. Прежде всего, он кричит "Я присоединяюсь к списку строк!" Всегда приятно.

6 голосов
/ 21 мая 2015
los.Aggregate((current, next) => current + "," + next);
4 голосов
/ 25 ноября 2008

Мой голос - string.Join

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

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