Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Artikel ini adalah spesifikasi fitur. Spesifikasi berfungsi sebagai dokumen desain untuk fitur tersebut. Ini termasuk perubahan spesifikasi yang diusulkan, bersama dengan informasi yang diperlukan selama desain dan pengembangan fitur. Artikel ini diterbitkan sampai perubahan spesifikasi yang diusulkan diselesaikan dan dimasukkan dalam spesifikasi ECMA saat ini.
Mungkin ada beberapa perbedaan antara spesifikasi fitur dan implementasi yang selesai. Perbedaan tersebut dicatat dalam catatan rapat desain bahasa terkait (LDM) .
Anda dapat mempelajari lebih lanjut tentang proses untuk mengadopsi speklet fitur ke dalam standar bahasa C# dalam artikel tentang spesifikasi .
Masalah juara: https://github.com/dotnet/csharplang/issues/1528
- [x] Diusulkan
- [x] Implementasi: https://github.com/dotnet/roslyn/pull/56853
- [x] Spesifikasi: file ini.
Ringkasan
Bahasa saat ini memperlakukan string interpolasi non-verbatim dan verbatim ( masing-masing$"" dan $@"") secara berbeda.
utama yang masuk akal perbedaan untuk ini adalah bahwa string interpolasi non-verbatim berfungsi seperti string normal dan tidak dapat berisi baris baru dalam segmen teksnya, dan sebaliknya harus menggunakan escape (seperti \r\n). Sebaliknya, string terinterpolasi verbatim dapat berisi baris baru dalam segmen teksnya (seperti string verbatim), dan tidak keluar dari baris baru atau karakter lain (kecuali "" untuk melepaskan kuotasi itu sendiri).
Ini semua wajar dan tidak akan berubah dengan proposal ini.
Apa yang tidak masuk akal hari ini adalah bahwa kita memperpanjang pembatasan 'tidak ada baris baru' dalam string interpolasi non-verbatim melampaui segmen teksnya hingga ke interpolasi itu sendiri . Ini berarti, misalnya, Anda tidak dapat menulis hal berikut:
var v = $"Count is\t: { this.Is.A.Really(long(expr))
.That.I.Should(
be + able)[
to.Wrap()] }.";
Pada akhirnya, aturan 'interpolasi harus berada pada satu baris itu sendiri' hanyalah pembatasan implementasi saat ini. Pembatasan itu benar-benar tidak diperlukan, dan bisa mengganggu, dan akan cukup sepele untuk dihapus (lihat pekerjaan https://github.com/dotnet/roslyn/pull/54875 untuk menunjukkan caranya). Pada akhirnya, yang dilakukannya adalah memaksa pengembang untuk menempatkan segala sesuatu pada satu baris, atau memaksanya ke dalam string verbatim (keduanya mungkin tidak diinginkan).
Ekspresi interpolasi itu sendiri bukan teks, dan tidak boleh tunduk pada aturan pembebasan/pemenggalan baris di dalamnya.
Perubahan spesifikasi
single_regular_balanced_text_character
- : '<Any character except / (U+002F), @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D) and new_line_character>'
- | '</ (U+002F), if not directly followed by / (U+002F) or * (U+002A)>'
+ : <Any character except @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D)>
+ | comment
;
Diskusi LDM
https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md
C# feature specifications