В случае, если вы представляете, на самом деле лучше использовать оператор конкатенации в классе строки. Это связано с тем, что он может предварительно вычислить длины строк, выделить буфер один раз и быстро скопировать память в буфер новой строки.
И это общее правило для объединения строк. Когда у вас есть заданное количество элементов, которые вы хотите объединить вместе (будь то 2, или 2000, и т. Д.), Лучше просто объединить их все с помощью оператора объединения следующим образом:
string result = s1 + s2 + ... + sn;
Следует отметить в вашем конкретном случае для s1:
string s1 = "foo" + "bar";
Компилятор видит, что он может оптимизировать здесь конкатенацию строковых литералов, и преобразует вышеприведенное в следующее:
string s1 = "foobar";
Обратите внимание, это только для объединения двух строковых литералов вместе. Так что, если вы должны были сделать это:
string s2 = foo + "a" + bar;
Тогда он не делает ничего особенного (но он по-прежнему вызывает Concat и предварительно вычисляет длину). Однако в этом случае:
string s2 = foo + "a" + "nother" + bar;
Компилятор переведет это на:
string s2 = foo + "another" + bar;
Если число строк, которые вы объединяете, является переменным (например, цикл, который вы не знаете заранее, сколько в нем элементов), то StringBuilder является наиболее эффективным способом объединения этих строк, так как вам всегда нужно будет повторно вычислить буфер, чтобы учесть добавляемые новые строковые записи (из которых вы не знаете, сколько осталось).