2008-11-25 3 views
171

Допустим, у вас есть:Список строк в одну строку

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); 

или Plain старый StringBuilder Еогеасп

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

+7

Выглядит как .Net 4 также будет включать в себя string.join (строка, IEnumerable ), что позволяет пропустить ToArray() http://msdn.microsoft.com/en-us/library/dd783876.aspx – luke 2010-05-19 13:26:43

ответ

233

Я бы с опцией А:

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

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

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

String.Join(String.Empty, los); 
+0

GA! Я даже не видел этот вариант вначале - читайте прямо мимо него. – 2008-11-25 20:47:12

4

Мой голос string.join

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

7

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

45
string.Concat(los.ToArray()); 

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

15

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

String.Join<string>(String.Empty, los);