Saya belum pernah melihat saran ini dari ReSharper. Bisakah Anda memberi contoh di mana itu menyarankan ini?
John Saunders
3
Saya baru mendapatkannya. Saran pertama adalah memindahkannya ke sumber daya, tetapi yang kedua adalah membuatnya menjadi string kata demi kata: MessageBox.Show ("Platipus harus dibelai sebelum pekerjaan dapat dilanjutkan.");
B. Clay Shannon
Saya masih mendapatkannya setiap saat. Ini umumnya salah satu peringatan penyelamat yang ingin Anda matikan, karena itu menyarankan membuat string kata demi kata tanpa alasan apa pun.
Saya bertanya-tanya mengapa Resharper menyarankan perubahan ini. Apakah ada guru CLR yang tahu jika string kata demi kata diproses lebih efisien karena karakter pelarian dapat diabaikan?
Matt Peterson
9
Saya pikir mungkin ReSharper menyarankannya karena string kata demi kata lebih mudah dibaca.
andyp
36
Saya percaya ini adalah semacam konvensi pengkodean (saya belum pernah melihat atau mendengar sebelumnya). Untuk string ReSharper menyarankan untuk memindahkannya ke file sumber daya untuk pelokalan atau membuatnya menjadi kata demi kata - untuk string kata demi kata ReSharper maka tidak lagi menawarkan opsi untuk melokalisasi string. Jadi sepertinya konvensi untuk membuat semua string yang tidak perlu lokalisasi kata demi kata.
Daniel Brückner
Katakanlah kita memiliki string literal yang ditugaskan ke variabel string, string myFileName = "C: \\ myfolder \\ myfile.txt"; Sekarang, saya ingin mengonversi variabel string myFileName ke string kata demi kata. Bagaimana saya melakukannya? Apakah ini berhasil? string verbatimStr = @myFileName;
sanjeev bhusal
3
@sanjeevbhusal: Anda tidak benar-benar pernah melakukannya. @ "C: \ myfolder \ myfile.txt" dan "C: \\ myfolder \\ myfile.txt" adalah hal yang sama dengan CLR. Ini hanya gula sintaksis, pada dasarnya.
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 pada "halo", dan dapat mencakup urutan escape sederhana (seperti \ t untuk karakter tab) dan urutan escape hexadecimal dan Unicode.
Literal string kata demi kata terdiri dari karakter @ diikuti oleh karakter tanda kutip ganda, nol atau lebih karakter, dan karakter tanda kutip 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.
Dengan kata lain satu-satunya karakter khusus dalam @ "string kata demi kata literal" adalah karakter kutipan ganda. Jika Anda ingin menulis string kata demi kata yang berisi kutipan ganda, Anda harus menulis dua kutipan ganda. Semua karakter lain diartikan secara harfiah.
Anda bahkan dapat memiliki baris baru literal dalam string literal kata demi kata. Dalam string literal biasa Anda tidak dapat memiliki baris baru literal. Sebagai gantinya Anda harus menggunakan misalnya "\n".
Verbatim string literal sering berguna untuk menyematkan nama file dan ekspresi reguler dalam kode sumber, karena backslash dalam tipe string ini adalah umum dan perlu melarikan diri jika string literal biasa digunakan.
Tidak ada perbedaan pada saat runtime antara string yang dibuat dari string literal biasa dan string yang dibuat dari string string verbatim - keduanya adalah tipe System.String.
Tidak ada perbedaan runtime antara string dan string kata demi kata. Mereka hanya berbeda pada waktu kompilasi. Kompiler menerima urutan pelarian yang lebih sedikit dalam string kata demi kata sehingga apa yang Anda lihat adalah apa yang Anda dapatkan selain dari pelarian kutipan.
Anda juga dapat menggunakan karakter kata demi kata, @, untuk memberi tahu kompiler untuk memperlakukan kata kunci sebagai nama:
var@if="if";//okay, treated as a nameConsole.WriteLine(@if);//compiler err, if without @ is a keywordConsole.WriteLine(if);var@a="a";//okayConsole.WriteLine(@a);//also okay, @ isn't part of the nameConsole.WriteLine(a);
String biasa menggunakan urutan pelarian khusus untuk menerjemahkan ke karakter khusus.
/*
This string contains a newline
and a tab and an escaped backslash\
*/Console.WriteLine("This string contains a newline\nand a tab\tand an escaped backslash\\");
String Verbatim diartikan apa adanya, tanpa menerjemahkan urutan escape:
/*
This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.
*/Console.WriteLine(@"This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.");
Jawaban:
String kata demi kata adalah string yang tidak perlu diloloskan, seperti nama file:
string myFileName = "C:\\myfolder\\myfile.txt";
akan menjadi
string myFileName = @"C:\myfolder\myfile.txt";
Simbol @ berarti membaca string itu secara harfiah, dan tidak menafsirkan karakter kontrol sebaliknya.
sumber
Ini tercakup dalam bagian 2.4.4.5 dari spesifikasi C # :
Dengan kata lain satu-satunya karakter khusus dalam @ "string kata demi kata literal" adalah karakter kutipan ganda. Jika Anda ingin menulis string kata demi kata yang berisi kutipan ganda, Anda harus menulis dua kutipan ganda. Semua karakter lain diartikan secara harfiah.
Anda bahkan dapat memiliki baris baru literal dalam string literal kata demi kata. Dalam string literal biasa Anda tidak dapat memiliki baris baru literal. Sebagai gantinya Anda harus menggunakan misalnya
"\n"
.Verbatim string literal sering berguna untuk menyematkan nama file dan ekspresi reguler dalam kode sumber, karena backslash dalam tipe string ini adalah umum dan perlu melarikan diri jika string literal biasa digunakan.
Tidak ada perbedaan pada saat runtime antara string yang dibuat dari string literal biasa dan string yang dibuat dari string string verbatim - keduanya adalah tipe
System.String
.sumber
Tidak ada perbedaan runtime antara string dan string kata demi kata. Mereka hanya berbeda pada waktu kompilasi. Kompiler menerima urutan pelarian yang lebih sedikit dalam string kata demi kata sehingga apa yang Anda lihat adalah apa yang Anda dapatkan selain dari pelarian kutipan.
Anda juga dapat menggunakan karakter kata demi kata, @, untuk memberi tahu kompiler untuk memperlakukan kata kunci sebagai nama:
sumber
Anda dapat memiliki string multiline juga menggunakan string kata demi kata:
tanpa
@
Anda mendapat kesalahan.Di VB14 ada fitur baru yang disebut
Multiline Strings
, itu seperti string kata demi kata di C #.sumber
String biasa menggunakan urutan pelarian khusus untuk menerjemahkan ke karakter khusus.
String Verbatim diartikan apa adanya, tanpa menerjemahkan urutan escape:
sumber
Jika Anda ingin menghapus peringatan Resharper, Anda dapat menggunakan:
Untuk hal-hal seperti parameter, lokasi file, mis. ini bisa menjadi solusi yang bagus.
sumber