Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questo articolo è una specifica di funzionalità. La specifica funge da documento di progettazione per la funzionalità. Include le modifiche specifiche proposte, insieme alle informazioni necessarie durante la progettazione e lo sviluppo della funzionalità. Questi articoli vengono pubblicati fino a quando le modifiche specifiche proposte non vengono completate e incorporate nella specifica ECMA corrente.
Potrebbero verificarsi alcune discrepanze tra la specifica di funzionalità e l'implementazione completata. Tali differenze sono riportate nelle note pertinenti del language design meeting (LDM) .
Puoi trovare ulteriori informazioni sul processo di adozione degli speclet delle funzionalità nello standard del linguaggio C# nell'articolo sulle specifiche di .
Problema del campione: https://github.com/dotnet/csharplang/issues/1528
- [x] Proposta
- [x] Implementazione: https://github.com/dotnet/roslyn/pull/56853
- [x] Specifiche: questo file.
Sommario
Attualmente, il linguaggio considera le stringhe interpolate non verbatim e verbatim (rispettivamente$""
e $@""
) in modo diverso. L'""
di escape di una virgoletta stessa).
Questo è tutto ragionevole e non cambierà con questa proposta.
Oggi non è possibile estendere la restrizione sulle "nuove righe" in una stringa non verbatim interpolata oltre segmenti di testo nelle interpolazioni stesse. Ciò significa, ad esempio, che non è possibile scrivere quanto segue:
var v = $"Count is\t: { this.Is.A.Really(long(expr))
.That.I.Should(
be + able)[
to.Wrap()] }.";
In definitiva, la regola "interpolazione deve essere su una sola riga" è solo una restrizione dell'attuale implementazione. Questa restrizione non è veramente necessaria e può essere fastidiosa e sarebbe piuttosto semplice da rimuovere (vedere lavoro https://github.com/dotnet/roslyn/pull/54875 per mostrare come). Alla fine, tutto ciò che fa è costringere il dev a posizionare le cose su una singola riga, oppure costringerle in una stringa interpolata verbatim (entrambe potrebbero essere non appetibili).
Le espressioni di interpolazione non sono testo e non dovrebbero essere assoggettate a regole di escape/di nuova linea.
Modifica delle specifiche
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
;
Discussioni LDM
https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md
C# feature specifications