Penggabungan String menggunakan operator '+'

86

Melihat stringmetadata kelas, saya hanya melihat operator ==dan !=kelebihan beban. Jadi, bagaimana cara melakukan penggabungan untuk +operator ' '?

Edit :

Beberapa catatan menarik dari Eric Lippert tentang penggabungan string:

Bagian 1

Bagian 2

Ada juga artikel super dari Joel yang dirujuk di bagian 2 ( http://www.joelonsoftware.com/articles/fog0000000319.html )

Pemrogram Pemula
sumber

Jawaban:

143

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.

Jon Skeet
sumber
8
Jawaban yang bagus; hanya pertanyaan lanjutan: jika Anda menggabungkan string di dalam loop, bagaimana kompilator bekerja dengan operator .Concat ketika ia tidak dapat mengetahui sebelumnya apa yang akan terjadi dalam loop.
frenchie
Ah ok! Dan itulah mengapa lebih baik menggunakan StringBuilder untuk penggabungan?
frenchie
4
@frenchie: Itulah mengapa lebih baik menggunakan StringBuilder untuk penggabungan berulang ... tetapi mengapa itu tidak layak untuk penggabungan sejumlah nilai tetap .
Jon Skeet
@ Jon-Skeet: terima kasih untuk klarifikasi cepat ... saya harus memeriksa di IL juga .. dan ini adalah cara menambahkan int juga? dengan memanggil metode Add?
Pemrogram Pemula
2
Tetapi perhatikan bahwa saat ini string.Concatdan string.Joinmetode memiliki banyak kelebihan, termasuk beberapa mengambil IEnumerable<>contoh. Jadi mereka lebih nyaman digunakan dalam banyak kasus daripada menggunakan a StringBuilder(Saya tidak tahu apakah metode ini menggunakan secara StringBuilderinternal, saya hanya mengatakan bahwa mereka lebih nyaman dalam banyak kasus).
Jeppe Stig Nielsen