Saya telah menemukan bahwa sementara interpolasi string benar-benar baik ketika diterapkan pada panggilan format string basis kode saya yang sudah ada, mengingat batas kolom yang umumnya disukai, string dengan cepat menjadi terlalu panjang untuk satu baris. Terutama ketika ekspresi yang diinterpolasi kompleks. Dengan string format Anda memiliki daftar variabel yang dapat Anda bagi menjadi beberapa baris.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
Adakah yang punya cara lebih disukai untuk memecah garis-garis ini?
Saya kira Anda bisa melakukan sesuatu seperti:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
$""
yang berfungsi seperti@""
$"some text { obj1.property }" + " more text { obj2.property }";
tampaknya tidak melakukan apa yang Anda pikirkan. Hanya separuh pertama dari ekspresi itu adalah string yang diinterpolasi; kemudian digabungkan dengan string literal non- interpolated" more text { obj2.property }"
Jawaban:
Anda dapat memecah baris menjadi beberapa baris, tetapi saya tidak akan mengatakan sintaks terlihat bagus lagi.
Anda perlu menggunakan
$@
sintaks untuk menggunakan string kata demi kata yang diinterpolasi , dan Anda dapat menempatkan baris baru di dalam{...}
parameter, seperti ini:String di atas tidak akan mengandung baris baru dan benar-benar akan memiliki konten seperti ini:
(catatan, format norwegia)
Sekarang, setelah mengatakan itu, saya tidak akan berhenti menggunakan
string.Format
. Menurut pendapat saya beberapa ekspresi interpolasi string ini terlihat sangat bagus, tetapi yang lebih kompleks mulai menjadi sangat sulit dibaca. Mempertimbangkan bahwa kecuali Anda menggunakanFormattableString
, kode akan dikompilasi menjadi panggilan untukString.Format
tetap, saya akan mengatakan terus denganString.Format
mana masuk akal.sumber
FormattableString
intinyaString.Format
juga.$@""
sintaksnya!FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");
karena menggabungkan dua string yang diinterpolasi menjadi satu string sederhana.> var name = "Simon"; var templateName = "How to interpolate a verbatim string"; var now = DateTime.UtcNow;. var output = $@"Hi {name}, This template is a demo of {templateName}. It was ran at {now.ToString("o")}"; > output
. Outputnya adalah"Hi Simon,\r\nThis template is a demo of How to interpolate a verbatim string.\r\n\r\nIt was ran at 2020-01-24T15:49:35.6678353Z"
Anda dapat menggabungkan
$
dan@
bersama - sama untuk mendapatkan interpolasi string dan string multi-line literal:Tapi itu akan memberi Anda
NewLine
karakter di antaranya, jadi itu mungkin bukan yang Anda inginkan.sumber
$@"
di studio visual Anda harus memulai setiap baris baru dari ujung kiri editor teks.Sementara OP meminta sesuatu yang lain, saya berharap banyak orang yang membaca pertanyaan ini ingin multiline interpolasi
$""
yang berfungsi seperti itu@""
. Untuk melakukannya, gunakan$@""
sumber
Ini dia:
Perhatikan yang kedua
$
di$"..." + $"..."
sumber
FormattableString
gips pada string bersambung?Saya telah menggunakan StringBuilder di dalam ToString () yang diganti sebagai contoh.
sumber
buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);
???