Ini adalah pertanyaan .NET untuk C # (atau mungkin VB.net), tetapi saya mencoba mencari tahu apa perbedaan antara deklarasi berikut:
string hello = "hello";
vs.
string hello_alias = @"hello";
Mencetak pada konsol tidak ada bedanya, properti panjangnya sama.
@
.Jawaban:
Ini menandai string sebagai string kata demi kata - apa pun dalam string yang biasanya ditafsirkan sebagai urutan pelarian diabaikan.
Begitu
"C:\\Users\\Rich"
juga dengan@"C:\Users\Rich"
Ada satu pengecualian: urutan pelarian diperlukan untuk kutipan ganda. Untuk menghindari kutip ganda, Anda harus menempatkan dua kutip ganda berturut-turut. Misalnya,
@""""
evaluasi ke"
.sumber
{{
jika Anda ingin menggunakan penjepit biasa dalamstring.Format
panggilan.Ini adalah string literal kata demi kata . Ini berarti melarikan diri tidak berlaku. Contohnya:
Di sini
verbatim
danregular
memiliki konten yang sama.Ini juga memungkinkan konten multi-line - yang bisa sangat berguna untuk SQL:
Satu-satunya jalan keluar yang diperlukan untuk string literal kata demi kata adalah untuk mendapatkan tanda kutip ganda (") yang Anda lakukan dengan menggandakannya:
sumber
'@' Juga memiliki arti lain: meletakkannya di depan deklarasi variabel memungkinkan Anda untuk menggunakan kata kunci yang dipesan sebagai nama variabel.
Sebagai contoh:
Saya hanya menemukan satu atau dua kegunaan yang sah untuk ini. Terutama di ASP.NET MVC ketika Anda ingin melakukan sesuatu seperti ini:
Yang akan menghasilkan tautan HTML seperti:
Kalau tidak, Anda harus menggunakan 'Kelas', yang bukan kata kunci yang dicadangkan tetapi huruf besar 'C' tidak mengikuti standar HTML dan tidak terlihat benar.
sumber
Karena Anda secara eksplisit meminta VB juga, izinkan saya menambahkan saja sintaks string kata demi kata ini tidak ada di VB, hanya di C #. Sebaliknya, semua string adalah kata demi kata dalam VB (kecuali untuk fakta bahwa mereka tidak dapat berisi jeda baris, tidak seperti string C # verbatim):
Escape sequence tidak ada di VB (kecuali penggandaan karakter kutipan, seperti dalam string C # verbatim) yang membuat beberapa hal lebih rumit. Misalnya, untuk menulis kode berikut dalam VB Anda harus menggunakan gabungan (atau cara lain untuk membangun string)
Dalam VB ini akan ditulis sebagai berikut:
(
&
adalah operator rangkaian string VB.+
dapat juga digunakan.)sumber
"
dan"
.String.Format
, yang memungkinkan melakukan ini. Bahkan, sekarang saya tidak akan pernah menulis"x" & Environment.NewLine
, dan sebagai gantinya selalu menggunakanString.Format("x{0}", Environment.Newline)
dll. Namun, C # lebih nyaman di sini."x" & nl & nl
atau"x" + nl + nl
atau"x" . $nl . $nl
setiap hari selama"x\n\n"
. Juga sudah"x" + bs + bs
berakhir"x\\\\"
. Dan"x" + q + q
lebih dari"x\"\""
/"x"""""
. SekarangString.Format
, itu masalah lain yang tidak terkait dengan perbandingan yang kami lakukan di atas.http://msdn.microsoft.com/en-us/library/aa691090.aspx
C # mendukung dua bentuk string literal: string literal biasa dan string literal kata demi kata.
Literal string reguler terdiri dari nol atau lebih karakter yang diapit dengan tanda kutip ganda, seperti dalam "halo", dan dapat mencakup urutan escape sederhana (seperti \ untuk karakter tab) dan urutan escape hexadecimal dan Unicode.
Literal string kata demi kata terdiri dari karakter @ diikuti oleh karakter kutipan ganda, nol atau lebih karakter, dan karakter kutipan ganda penutup. Contoh sederhana adalah @ "halo". Dalam string literal kata demi kata, karakter di antara pembatas diinterpretasikan secara verbatim, satu-satunya pengecualian adalah urutan kutipan-escape. Secara khusus, sekuens escape sederhana dan sekuens heksadesimal dan Unicode tidak diproses dalam string literal kata demi kata. Sebuah string literal kata demi kata dapat menjangkau beberapa baris.
sumber
Ini adalah string kata demi kata, dan mengubah aturan pelolosan - satu-satunya karakter yang sekarang diloloskan adalah ", lolos ke" ". Ini sangat berguna untuk jalur file dan regex:
dll
sumber
Disalin dari MSDN :
sumber
Puting a
@
di depan string memungkinkan Anda untuk menggunakan karakter khusus seperti garis miring terbalik atau tanda kutip ganda tanpa harus menggunakan kode khusus atau karakter melarikan diri.Jadi, Anda dapat menulis:
dari pada:
sumber
Penjelasannya sederhana. Untuk mewakili string
"string\"
, kompiler perlu"string\\"
karena\
merupakan karakter pelarian. Jika Anda menggunakannya@"string\"
, Anda bisa melupakannya\\
.sumber