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 + y
yang 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 StringBuilder
untuk kasus tersebut. Saya memiliki artikel yang membahas lebih detail tentang keduanya yang diharapkan akan menjawab pertanyaan lebih lanjut.
string.Concat
danstring.Join
metode memiliki banyak kelebihan, termasuk beberapa mengambilIEnumerable<>
contoh. Jadi mereka lebih nyaman digunakan dalam banyak kasus daripada menggunakan aStringBuilder
(Saya tidak tahu apakah metode ini menggunakan secaraStringBuilder
internal, saya hanya mengatakan bahwa mereka lebih nyaman dalam banyak kasus).