Menggunakan variabel di dalam string

90

Di PHP saya bisa melakukan hal berikut:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Apakah ada konstruksi bahasa yang serupa di C #?

Saya tahu ada String.Format();tetapi saya ingin tahu apakah itu bisa dilakukan tanpa memanggil fungsi / metode pada string.

thwd
sumber

Jawaban:

224

Di C # 6 Anda dapat menggunakan interpolasi string :

string name = "John";
string result = $"Hello {name}";

Penyorotan sintaks untuk ini di Visual Studio membuatnya sangat mudah dibaca dan semua token diperiksa.

Fenton
sumber
88

Fungsionalitas ini tidak terintegrasi dengan C # 5 atau lebih rendah.
Pembaruan: C # 6 sekarang mendukung interpolasi string, lihat jawaban yang lebih baru.

Cara yang disarankan untuk melakukannya adalah dengan String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Namun, saya menulis pustaka sumber terbuka kecil bernama SmartFormat yang diperluas String.Formatsehingga dapat menggunakan placeholder bernama (melalui refleksi). Jadi, Anda bisa melakukan:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Harap Anda menyukainya!

Scott Rippey
sumber
2
Jenis hukuman kinerja apa yang ada untuk menggunakan implementasi refleksi Anda vs string standar. Format?
styfle
Saya melihat Anda sudah memiliki halaman kinerja di wiki. Ini terlihat cukup menjanjikan. Kerja bagus!
styfle
Ya, saya yakin laman kinerja mungkin menjawab pertanyaan Anda, tetapi saya belum membuat perbandingan apa pun antara "Halo {0}" vs "Halo {nama}". Jelas refleksi akan memakan waktu lebih lama. Namun, menggunakan fitur cache meningkatkan kinerja penguraian, dan dapat meminimalkan perbedaannya. Either way, semuanya CEPAT!
Scott Rippey
1
Ini tidak lagi benar. C # 6 menambahkan ini sebagai fitur
Cole Johnson
5

Hingga C # 5 (-VS2013) Anda harus memanggil fungsi / metode untuk itu. Salah satu fungsi "normal" seperti String.Formatatau kelebihan beban operator +.

string str = "Hello " + name; // This calls an overload of operator +.

Dalam C # 6 (VS2015) interpolasi string telah diperkenalkan (seperti yang dijelaskan oleh jawaban lain).

Anders Abel
sumber
5

Gunakan metode berikut

1: Metode satu

var count = 123;
var message = $"Rows count is: {count}";

2: Metode dua

var count = 123;
var message = "Rows count is:" + count;

3: Metode tiga

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Metode empat

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Metode lima

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";
Abn Najaf
sumber
1
Alangkah baiknya untuk menambahkan komentar tentang mengapa Anda memilih menggunakan masing-masing metode ini.
ZombieCode