Condividi tramite


Testo letterale stringa non elaborato- """ in valori letterali stringa

Un valore letterale stringa non elaborato inizia e termina con un minimo di tre caratteri virgolette doppie ("):

var singleLine = """This is a "raw string literal". It can contain characters like \, ' and ".""";

I valori letterali stringa non elaborati possono estendersi su più righe:

var xml = """
        <element attr="content">
            <body>
            </body>
        </element>
        """;

Il riferimento al linguaggio C# documenta la versione rilasciata più di recente del linguaggio C#. Contiene anche la documentazione iniziale per le funzionalità nelle anteprime pubbliche per la versione futura del linguaggio.

La documentazione identifica tutte le funzionalità introdotte nelle ultime tre versioni della lingua o nelle anteprime pubbliche correnti.

Suggerimento

Per trovare quando una funzionalità è stata introdotta per la prima volta in C#, vedere l'articolo sulla cronologia delle versioni del linguaggio C#.

Le regole seguenti regolano l'interpretazione di un valore letterale stringa non elaborato su più righe:

  • Le virgolette di apertura devono essere gli ultimi caratteri non vuoti nella riga e le virgolette di chiusura devono essere i primi caratteri non spazi vuoti sulla riga.
  • Qualsiasi spazio vuoto a sinistra delle virgolette di chiusura viene rimosso da tutte le righe del valore letterale stringa non elaborato.
  • Qualsiasi spazio vuoto dopo le virgolette di apertura sulla stessa riga viene ignorato.
  • Le righe di sola spaziatura che seguono le virgolette di apertura sono incluse nel valore letterale stringa.
  • La nuova riga prima delle virgolette di chiusura non è inclusa nella stringa letterale.
  • Quando lo spazio vuoto precede il delimitatore finale sulla stessa riga, il numero esatto e il tipo di spazi vuoti (ad esempio, spazi e schede) devono esistere all'inizio di ogni riga di contenuto. In particolare, uno spazio non corrisponde a una scheda orizzontale e viceversa.

L'ultima regola è semplice se si è coerenti nel modo in cui si usano tabulazioni (U+0009) o spazi (U+0020) per impostare il rientro del codice, inclusi i valori letterali stringa non elaborati. È possibile usare entrambi, ma non combinarli nello stesso valore letterale stringa non elaborato multilinea. Ad esempio, le dichiarazioni seguenti sono legali (gli spazi vuoti vengono disegnati come \b per un carattere di spazio e \t per un carattere di tabulazioni:)

// Using `\b` and `\t` to visual the actual whitespace characters
var xml = """
\b\b\b\b<element attr="content">
\b\b\b\b\b\b<body>
\b\b\b\b\b\b</body>
\b\b\b\b</element>
\b\b\b\b""";

// Using `\b` and `\t` to visual the actual whitespace characters
var xmlTabs = """
\t\t\t\t<element attr="content">
\t\t\t\t\t\t<body>
\t\t\t\t\t\t</body>
\t\t\t\t</element>
\t\t\t\t""";

Tuttavia, poiché la dichiarazione seguente non usa un formato coerente per gli spazi vuoti a sinistra della chiusura """, la dichiarazione non è valida:

// Using `\b` and `\t` to visual the actual whitespace characters
var xml = """
\t\b\b\b<element attr="content">
\b\t\b\b\b\b<body>
\b\b\t\b\b\b</body>
\b\b\b\t</element>
\b\b\b\b""";

Suggerimento

Visual Studio e C# Dev Kit forniscono alcune funzionalità di convalida e di evidenziazione della sintassi quando i valori letterali stringa non elaborati contengono dati JSON o espressioni regolari.

Gli strumenti analizzano il testo. Se gli strumenti hanno la certezza che il testo rappresenta JSON o un'espressione regolare, l'editor fornisce la colorazione della sintassi.

È possibile migliorare l'esperienza aggiungendo un commento sopra la dichiarazione che indica il formato:

  • // lang=json indica che il valore letterale stringa non elaborato rappresenta i dati JSON.
  • // lang=regex indica che il valore letterale stringa non elaborato rappresenta un'espressione regolare.

Quando un valore letterale stringa non elaborato viene usato come argomento in cui il parametro usa per System.Diagnostics.CodeAnalysis.StringSyntaxAttribute indicare un formato, questi strumenti convalidano il valore letterale stringa non elaborato per alcuni dei tipi di formato. Sono supportati sia JSON che regex.

Per alcuni formati, il commento o l'attributo abilita i suggerimenti di codice offrono correzioni per i valori letterali stringa in base al formato.

Potrebbe essere necessario creare un valore letterale stringa non elaborato con tre o più caratteri virgolette doppie consecutive. I valori letterali stringa non elaborati possono iniziare e terminare con una sequenza di almeno tre caratteri tra virgolette doppie. Quando il valore letterale stringa contiene tre virgolette doppie consecutive, si inizia e termina il valore letterale stringa non elaborato con quattro caratteri virgolette doppie:

var moreQuotes = """" As you can see,"""Raw string literals""" can start and end with more than three double-quotes when needed."""";

Se è necessario iniziare o terminare un valore letterale stringa non elaborato con caratteri virgolette, usare il formato multilinea:

var MultiLineQuotes = """"
               """Raw string literals""" can start and end with more than three double-quotes when needed.
               """";

I valori letterali stringa non elaborati possono essere combinati anche con stringhe interpolate per incorporare i caratteri { e } nella stringa di output. Si usano più caratteri $ in un valore letterale stringa non elaborata interpolata per incorporare i caratteri { e } nella stringa di output senza eseguirne l'escape.

Il contenuto del valore letterale stringa non elaborato non deve contenere un set di caratteri " contigui la cui lunghezza è uguale o maggiore della lunghezza del delimitatore letterale stringa non elaborata. Ad esempio, le stringhe """" """ """" e """"""" """""" """"" """" """ """"""" sono ben formate. Tuttavia, le stringhe """ """ """ e """ """" """ non sono ben formate.

Vedi anche