$
pendek untuk String.Format
dan digunakan dengan interpolasi string, yang merupakan fitur baru dari C # 6. Seperti yang digunakan dalam kasus Anda, itu tidak melakukan apa-apa, sama seperti string.Format()
tidak melakukan apa-apa.
Ini menjadi miliknya sendiri ketika digunakan untuk membangun string dengan mengacu pada nilai-nilai lain. Apa yang sebelumnya harus ditulis sebagai:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);
Sekarang menjadi:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = $"{anInt},{aBool},{aString}";
Ada juga alternatif - kurang terkenal - bentuk interpolasi string menggunakan $@
(urutan kedua simbol itu penting). Ini memungkinkan fitur-fitur @""
string untuk dicampurkan dengan $""
untuk mendukung interpolasi string tanpa perlu untuk \\
seluruh string Anda. Jadi dua baris berikut:
var someDir = "a";
Console.WriteLine($@"c:\{someDir}\b\c");
akan menampilkan:
c:\a\b\c
$@
, maka Anda terpaksa keluar dari"
karakter dengan menggunakan""
. Ini tidak terjadi ketika Anda hanya menggunakan$
.Ini menciptakan string yang diinterpolasi .
Dari MSDN
mis:
Anda dapat menggunakan ekspresi dalam string yang diinterpolasi
Yang menyenangkan tentang itu adalah Anda tidak perlu khawatir tentang urutan parameter seperti yang Anda lakukan
String.Format
.Sekarang jika Anda ingin menghapus beberapa parameter Anda harus pergi dan memperbarui semua penghitungan, yang tidak lagi berlaku.
Perhatikan bahwa barang lama
string.format
masih relevan jika Anda ingin menentukan info budaya dalam pemformatan Anda .sumber
$
dan menentukan info kultur jika Anda mengonversi data ke string di dalam$
ekspresi menggunakan kultur yang benar, misalnya{somevar.ToString(...,[Insert culture info here])}
,.Kode Contoh
Keluaran
Ini adalah String Interpolasi . Anda dapat menggunakan string interpolasi di mana saja Anda bisa menggunakan string literal. Saat menjalankan program Anda akan mengeksekusi kode dengan string literal interpolasi, kode menghitung string literal baru dengan mengevaluasi ekspresi interpolasi. Komputasi ini terjadi setiap kali kode dengan string interpolasi dieksekusi.
Contoh berikut menghasilkan nilai string di mana semua nilai interpolasi string telah dihitung. Ini adalah hasil akhir dan memiliki tipe string. Semua kejadian kurung kurawal ganda
(“{{“ and “}}”)
dikonversi menjadi kurawal kurawal tunggal.Setelah mengeksekusi di atas 2 baris, variabel
message
berisi "Halo, Dunia".Referensi - MSDN
sumber
Fitur keren. Saya hanya ingin menunjukkan penekanan pada mengapa ini lebih baik daripada string.format jika tidak jelas bagi sebagian orang.
Saya membaca seseorang yang mengatakan urutan string.format ke "{0} {1} {2}" untuk mencocokkan parameter. Anda tidak dipaksa untuk memesan "{0} {1} {2}" di string.format, Anda juga dapat melakukan "{2} {0} {1}". Namun, jika Anda memiliki banyak parameter, seperti 20, Anda benar-benar ingin mengurutkan string menjadi "{0} {1} {2} ... {19}". Jika berantakan, Anda akan kesulitan mengatur parameter Anda.
Dengan $, Anda dapat menambahkan parameter sebaris tanpa menghitung parameter Anda. Ini membuat kode lebih mudah dibaca dan dipelihara.
Kelemahan dari $ adalah, Anda tidak dapat mengulangi parameter dalam string dengan mudah, Anda harus mengetiknya. Misalnya, jika Anda bosan mengetik System.Environment.NewLine, Anda dapat melakukan string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), tetapi, dalam $, Anda harus mengulanginya. Anda tidak dapat melakukan $ "{0}" dan meneruskannya ke string.format karena $ "{0}" mengembalikan "0".
Di samping catatan, saya telah membaca komentar di tpoic duplikat lain. Saya tidak bisa berkomentar, jadi ini dia. Ia mengatakan bahwa
membuat lebih dari satu objek string. Ini sebenarnya tidak benar. Jika Anda melakukan ini dalam satu baris, itu hanya membuat satu string dan ditempatkan di cache string.
Semuanya mengembalikan string dan hanya membuat satu nilai dalam cache.
Di samping itu:
Menciptakan 4 nilai berbeda dalam cache karena ada 4 ";".
Dengan demikian, akan lebih mudah untuk menulis kode seperti berikut ini, tetapi Anda akan membuat lima string yang diinterpolasi saat Carlos Muñoz mengoreksi:
Ini menciptakan satu string tunggal dalam cache sementara Anda memiliki kode yang sangat mudah dibaca. Saya tidak yakin tentang kinerjanya, tetapi, saya yakin MS akan mengoptimalkannya jika belum melakukannya.
sumber
String.Format()
dan kemudian digabungkan pada saat runtime denganString.Concat
. Jadi lebih baik Anda tidak membaginya menjadi beberapa barisPerhatikan bahwa Anda juga dapat menggabungkan keduanya, yang cukup keren (meskipun terlihat agak aneh):
sumber
$@
atau@$
. Sayangnya itu hanya bisa$@
@
mendefinisikan bagaimana merepresentasikan string literal.$
adalah jalan pintas untukstring.Format
. Anggap saja$(@"");
string.Format
. Sangat manis untuk menyajikan nilai yang diuraikan menjadistring.Format
, sehingga sebagian masuk akal, tetapi tidak sepenuhnya.$
pada dasarnya adalah panggilan fungsi tersirat sedangkan@
merupakan bagian dari literal, sepertim
dalam literal desimal. Itu sebabnya hanya ada satu urutan logis.$
, tetapi demi kompatibilitas maksimum dan tidak sulit pengkodean apakah pemisah direktori adalah '/' atau '\', dan juga menghindari kekacauan yang tak terhindarkan yang menyebabkan tebasan ganda atau tebas yang hilang di mana harus ada telah menjadi salah satu, saya sarankan menggunakanPath.Combine()
daripada menggunakan rangkaian string ketika bekerja dengan direktori dan file.Ini lebih nyaman daripada string.Format dan Anda bisa menggunakan intellisense di sini juga.
Dan inilah metode pengujian saya:
sumber
Ini menandakan interpolasi string.
Ini akan melindungi Anda karena itu menambah perlindungan waktu kompilasi pada evaluasi string.
Anda tidak akan lagi mendapatkan pengecualian dengan
string.Format("{0}{1}",secondParamIsMissing)
sumber
Contoh berikut menyoroti berbagai keuntungan menggunakan string interpolasi
string.Format()
sejauh kebersihan dan keterbacaan berjalan. Ini juga menunjukkan bahwa kode di dalam{}
dievaluasi seperti argumen fungsi lainnya, sama seperti jikastring.Format()
kita dipanggil.sumber
$ Sintaks bagus, tetapi dengan satu kelemahan.
Jika Anda membutuhkan sesuatu seperti templat string, yang dideklarasikan pada tingkat kelas sebagai bidang ... yah di satu tempat sebagaimana mestinya.
Maka Anda harus mendeklarasikan variabel pada tingkat yang sama ... yang tidak terlalu keren.
Jauh lebih baik menggunakan string. Sintaks untuk hal-hal semacam ini
Penggunaan global tidak benar-benar baik dan selain itu - juga tidak bekerja dengan global
sumber
Saya tidak tahu cara kerjanya, tetapi Anda juga dapat menggunakannya untuk menilai nilai Anda!
Contoh:
Tentu saja, Anda dapat mengganti "ini!" dengan variabel apa pun atau apa pun yang bermakna, sama seperti Anda juga dapat mengubah tab.
sumber
tanda $ pada string adalah untuk definisi string interpolasi yang merupakan fitur dalam C # untuk menginterpolasi string adalah "string sejati" yang mungkin berisi ekspresi yang diinterpolasi
untuk informasi lebih lanjut, inilah sumber jawaban dan contohnya: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
sumber