interpolazione di $-C# String (riferimento)

Il carattere speciale $ identifica una stringa letterale come stringa interpolata. Una stringa interpolata è un valore letterale stringa che può contenere espressioni di interpolazione. Quando una stringa interpolata viene risolta in una stringa di risultato, gli elementi con espressioni di interpolazione vengono sostituiti dalle rappresentazioni stringa dei risultati dell'espressione. Questa funzionalità è disponibile a partire C# da 6.

L'interpolazione di stringhe offre una sintassi più leggibile e pratica per creare stringhe formattate rispetto alla funzionalità di formattazione composita delle stringhe. L'esempio seguente usa entrambe le funzionalità per produrre lo stesso output:

C#CopiaEsegui

string name = "Mark";
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.

Struttura di una stringa interpolata

Per identificare un valore letterale stringa come stringa interpolata, anteporre a questa il simbolo $. Tra $ e il simbolo " all'inizio del valore letterale stringa non possono essere presenti spazi vuoti,

La struttura di un elemento con un'espressione di interpolazione è la seguente:

C#Copia

{<interpolationExpression>[,<alignment>][:<formatString>]}

Gli elementi tra parentesi quadre sono facoltativi. La tabella seguente descrive i singoli elementi:

Elemento Descrizione
interpolationExpression Espressione che produce un risultato da formattare. La rappresentazione di stringa di null è String.Empty.
alignment Espressione costante il cui valore definisce il numero minimo di caratteri nella rappresentazione di stringa del risultato dell'espressione. Se è positivo, la rappresentazione stringa è allineata a destra; se è negativo la rappresentazione stringa è allineata a sinistra. Per altre informazioni, vedere Componente di allineamento.
formatString Stringa di formato supportata dal tipo di risultato dell'espressione. Per altre informazioni, vedere Componente della stringa di formato.

L'esempio seguente usa i componenti di formattazione facoltativi descritti in precedenza:

C#CopiaEsegui

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");

const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - display only three decimal digits of the pi number");
// Expected output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number    

Caratteri speciali

Per includere una parentesi graffa, "{" o "}", nel testo prodotto da una stringa interpolata, digitare due parentesi graffe, ovvero "{{" o "}}". Per altre informazioni, vedere Sequenze di escape delle parentesi graffe.

Dato che i due punti (":") hanno un significato speciale in un elemento espressione di interpolazione, se si vuole usare un operatore condizionale in un'espressione di interpolazione, racchiudere l'espressione tra parentesi.

L'esempio seguente illustra come includere una parentesi graffa in una stringa di risultato e come usare un operatore condizionale in un'espressione di interpolazione:

C#CopiaEsegui

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
// Expected output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

Una stringa Verbatim interpolata inizia con il carattere $ seguito dal carattere di @. Per altre informazioni sulle stringhe verbatim, vedere gli argomenti relativi a string e all'identificatore verbatim.

 Nota

A partire C# da 8,0, è possibile usare i token di $ e di @ in qualsiasi ordine: sia $@"..." che @$"..." sono stringhe verbatim interpolate valide. Nelle versioni C# precedenti, il token di $ deve essere visualizzato prima del token di @.

Conversioni implicite e come specificare l'implementazione di IFormatProvider

Da una stringa interpolata vengono effettuate tre conversioni implicite:

  1. Conversione di una stringa interpolata in un'istanza String che rappresenta il risultato della risoluzione della stringa interpolata, dove gli elementi dell'espressione di interpolazione vengono sostituiti con le rappresentazioni stringa dei risultati, formattate correttamente. Questa conversione usa il CurrentCulture per formattare i risultati dell'espressione.

  2. Conversione di una stringa interpolata in un'istanza di FormattableString che rappresenta una stringa di formato composito e i risultati dell'espressione da formattare. Questa opzione consente di creare più stringhe risultato con contenuto specifico delle impostazioni cultura da una singola istanza di FormattableString. A tale scopo, chiamare uno dei metodi seguenti:

    È anche possibile usare il metodo ToString(IFormatProvider) per fornire un'implementazione definita dall'utente dell'interfaccia IFormatProvider che supporta la formattazione personalizzata. Per altre informazioni, vedere la sezione formattazione personalizzata con ICustomFormatter nell'articolo formattazione di tipi in .NET .

  3. Conversione di una stringa interpolata in un'istanza di IFormattable che consente anche di creare più stringhe risultato con contenuto associato a impostazioni cultura specifiche da una singola istanza di IFormattable.

L'esempio seguente usa la conversione implicita a FormattableString per creare stringhe di risultato con impostazioni cultura specifiche:

C#CopiaEsegui

double speedOfLight = 299792.458;
FormattableString message = $"The speed of light is {speedOfLight:N3} km/s.";

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected output is:
// nl-NL      The speed of light is 299.792,458 km/s.
// en-IN      The speed of light is 2,99,792.458 km/s.
// Invariant  The speed of light is 299,792.458 km/s.

Risorse aggiuntive

Se non si ha familiarità con l'interpolazione di stringhe, vedere l'esercitazione interattiva Interpolazione di stringhe in C#. È anche possibile verificare un'altra esercitazione di interpolazione di stringhe in C# che illustra come usare le stringhe interpolate per produrre stringhe formattate.

Compilazione di stringhe interpolate

Se una stringa interpolata è di tipo string, viene in genere trasformata in una chiamata al metodo String.Format. Il compilatore può sostituire String.Format con String.Concat se il comportamento analizzato è equivalente alla concatenazione.

Se una stringa interpolata dispone del tipo IFormattable o FormattableString, il compilatore genera una chiamata al metodo FormattableStringFactory.Create.

Specifiche del linguaggio C#

Per altre informazioni, vedere la sezione Stringhe interpolate della specifica del linguaggio C#.

Torna su
Categoria

C# (935)


Autore

https://docs.microsoft.com/it-it/dotnet/csharp/language-reference/tokens/interpolated


Data pubblicazione

26/02/2020