Aracılığıyla paylaş


Tüm ilişkilendirmelerde yeni satırlara izin ver

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 dil tasarım toplantısı (LDM) notlarında yakalanır.

Özellik belirtimlerini C# dil standardına benimseme işlemi hakkında daha fazla bilgi edinmek içinbelirtimleri makalesinde bulabilirsiniz.

Şampiyon sorunu: https://github.com/dotnet/csharplang/issues/1528

Ö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