Tidak - kompiler C # melakukannya :)
Jadi kode ini:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
sebenarnya dikompilasi sebagai:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - edit intervensi menghapus bit lain secara tidak sengaja.)
Manfaat dari compiler C # yang memperhatikan bahwa ada beberapa rangkaian string di sini adalah bahwa Anda tidak akan membuat string perantara x + yyang kemudian perlu disalin lagi sebagai bagian dari penggabungan (x + y)dan z. Sebaliknya, kami menyelesaikan semuanya dalam sekali jalan.
EDIT: Perhatikan bahwa kompilator tidak dapat melakukan apa pun jika Anda menggabungkan dalam satu lingkaran. Misalnya, kode ini:
string x = "";
foreach (string y in strings)
{
x += y;
}
hanya berakhir sama dengan:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... jadi ini tidak menghasilkan banyak sampah, dan itu mengapa Anda harus menggunakan StringBuilderuntuk kasus tersebut. Saya memiliki artikel yang membahas lebih detail tentang keduanya yang diharapkan akan menjawab pertanyaan lebih lanjut.