Допустим, у вас есть:
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
ИЛИ есть способ лучше?





Я бы выбрал вариант А:
String.Join(String.Empty, los.ToArray());
Я считаю, что для этой цели был написан метод Join. Фактически, если вы посмотрите на Reflector, вы увидите, что небезопасный код использовался для его реальной оптимизации. Два других также РАБОТАЮТ, но я думаю, что функция Join была написана для этой цели и, как мне кажется, наиболее эффективна. Хотя я мог ошибаться ...
Согласно @Nuri YILMAZ без .ToArray(), но это .NET 4+:
String.Join(String.Empty, los);
GA! Я даже сначала не увидел эту опцию - прочел сразу после нее.
Я провел несколько тестов, и они показали, что это примерно в три раза быстрее, чем StringBuilder, но оба они были намного лучше, чем совокупный
В 3 раза быстрее StringBuilder? Вау, я подумал, что это будет быстрее, не понимал, насколько быстрее. Однако это имеет смысл, это делается в небезопасном коде с использованием указателей, так что ... имеет смысл.
красивый! единственное замечание: для соединения не требуется los.ToArray (), потому что List <T> может приводить IEnumerable <T>.
@Nuri: Этот вопрос был задан в 08, до выхода .Net 4. Перегрузка, которая принимает IEnumerable <T>, была добавлена в .Net 4.
@BFree: Понятно, вы правы! Мне было наплевать на опубликованную дату, извините.
String.Join в сочетании со String.Concat является золотым. Пример: 'String.Concat ("{", String.Join (",", m_Data), "}");'
Мой голос - строка.
Нет необходимости в лямбда-вычислениях и создании временных функций, меньше вызовов функций, меньше выталкивания и выталкивания стека.
String.Join () реализуется довольно быстро, и, поскольку у вас уже есть коллекция рассматриваемых строк, вероятно, лучший выбор. Прежде всего, он кричит: «Я присоединяюсь к списку строк!» Всегда приятно.
string.Concat(los.ToArray());
Если вы просто хотите объединить строки, используйте string.Concat () вместо string.Join ().
Если вы используете .net 4.0, вы можете использовать способ сортировки:
String.Join<string>(String.Empty, los);
los.Aggregate((current, next) => current + "," + next);
Похоже, .Net 4 также будет включать строку.Join (string, IEnumerable <string>), позволяющую пропустить ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx