Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu makale bir özellik belirtimidir. Belirtim, özelliğin tasarım belgesi olarak görev alır. Önerilen belirtim değişikliklerini ve özelliğin tasarımı ve geliştirilmesi sırasında gereken bilgileri içerir. Bu makaleler, önerilen belirtim değişiklikleri son haline getirilene ve geçerli ECMA belirtimine dahil edilene kadar yayımlanır.
Özellik belirtimi ile tamamlanan uygulama arasında bazı tutarsızlıklar olabilir. Bu farklılıklar,ilgili
Özellik belirtimlerini C# dil standardına benimseme işlemi hakkında daha fazla bilgi edinmek için
Şampiyon sorunu: https://github.com/dotnet/csharplang/issues/1528
- [x] Önerilen
- [x] Uygulama: https://github.com/dotnet/roslyn/pull/56853
- [x] Belirtim: bu dosya.
Özet
Günümüzde dil, düz metin olmayan ve tam olarak ilişkilendirilmiş dizeleri (sırasıyla$"" ve $@"") farklı şekilde ele alır. Bunlar için birincil mantıklı farkı, düz metin ilişkilendirilmiş olmayan bir dizenin normal bir dize gibi çalışması ve metin kesimlerinde yeni satırlar içerememesi ve bunun yerine kaçışları (\r\ngibi) kullanması gerektiğidir. Buna karşılık, düz metin ilişkilendirmeli dize, metin kesimlerinde yeni satırlar içerebilir (düz metin dizesi gibi) ve yeni satırlardan veya başka bir karakterden kaçamaz (bir alıntının kendisinden kaçmak için "" dışında).
Bu tamamen makuldür ve bu teklifle değişmez.
Bugün mantıksız olan şey, 'yeni satır yok' kısıtlamasını, birebir olmayan bir ilişkilendirilmiş dizedeki metin bölümlerinin ötesine geçerek, interpolasyonların kendilerine kadar genişletmemizdir. Bu, örneğin aşağıdakileri yazamayacağınız anlamına gelir:
var v = $"Count is\t: { this.Is.A.Really(long(expr))
.That.I.Should(
be + able)[
to.Wrap()] }.";
Sonuç olarak, 'ilişkilendirme tek bir satırda olmalıdır' kuralı yalnızca geçerli uygulamanın bir kısıtlamasıdır. Bu kısıtlama gerçekten gerekli değildir ve can sıkıcı olabilir ve kaldırılması oldukça önemsiz olacaktır (nasıl yapıldığını göstermek için bkz. çalışma https://github.com/dotnet/roslyn/pull/54875). Sonunda tek yaptığı, geliştiriciyi öğeleri tek bir satıra yerleştirmeye zorlamak veya bunları doğrudan bir ara dizeye zorlamaktır (her ikisi de hoş olmayabilir).
Interpolasyon ifadelerinin kendileri metin değildir ve kaçış/yeni satır kurallarına tabi olmamalıdır.
Belirtim değişikliği
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
;
LDM Tartışmaları
https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md
C# feature specifications