interpolazione di $-C# String (riferimento)$ - string interpolation (C# reference)

Il carattere speciale $ identifica una stringa letterale come stringa interpolata.The $ special character identifies a string literal as an interpolated string. Una stringa interpolata è un valore letterale stringa che può contenere espressioni di interpolazione.An interpolated string is a string literal that might contain interpolation expressions. 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.When an interpolated string is resolved to a result string, items with interpolation expressions are replaced by the string representations of the expression results. Questa funzionalità è disponibile a partire C# da 6.This feature is available starting with C# 6.

L'interpolazione di stringhe offre una sintassi più leggibile e pratica per creare stringhe formattate rispetto alla funzionalità di formattazione composita delle stringhe.String interpolation provides a more readable and convenient syntax to create formatted strings than a string composite formatting feature. L'esempio seguente usa entrambe le funzionalità per produrre lo stesso output:The following example uses both features to produce the same output:

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 interpolataStructure of an interpolated string

Per identificare un valore letterale stringa come stringa interpolata, anteporre a questa il simbolo $.To identify a string literal as an interpolated string, prepend it with the $ symbol. Tra $ e il simbolo " all'inizio del valore letterale stringa non possono essere presenti spazi vuoti,You cannot have any white space between the $ and the " that starts a string literal.

La struttura di un elemento con un'espressione di interpolazione è la seguente:The structure of an item with an interpolation expression is as follows:

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

Gli elementi tra parentesi quadre sono facoltativi.Elements in square brackets are optional. La tabella seguente descrive i singoli elementi:The following table describes each element:

ElementoElement DescrizioneDescription
interpolationExpression Espressione che produce un risultato da formattare.The expression that produces a result to be formatted. La rappresentazione di null stringa String.Emptydi è.String representation of null is String.Empty.
alignment Espressione costante il cui valore definisce il numero minimo di caratteri nella rappresentazione di stringa del risultato dell'espressione.The constant expression whose value defines the minimum number of characters in the string representation of the expression result. Se è positivo, la rappresentazione stringa è allineata a destra; se è negativo la rappresentazione stringa è allineata a sinistra.If positive, the string representation is right-aligned; if negative, it's left-aligned. Per altre informazioni, vedere Componente di allineamento.For more information, see Alignment Component.
formatString Stringa di formato supportata dal tipo di risultato dell'espressione.A format string that is supported by the type of the expression result. Per altre informazioni, vedere Componente della stringa di formato.For more information, see Format String Component.

L'esempio seguente usa i componenti di formattazione facoltativi descritti in precedenza:The following example uses optional formatting components described above:

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 specialiSpecial characters

Per includere una parentesi graffa, "{" o "}", nel testo prodotto da una stringa interpolata, digitare due parentesi graffe, ovvero "{{" o "}}".To include a brace, "{" or "}", in the text produced by an interpolated string, use two braces, "{{" or "}}". Per altre informazioni, vedere Sequenze di escape delle parentesi graffe.For more information, see Escaping Braces.

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.As the colon (":") has special meaning in an interpolation expression item, in order to use a conditional operator in an interpolation expression, enclose that expression in parentheses.

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:The following example shows how to include a brace in a result string and how to use a conditional operator in an interpolation expression:

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.An interpolated verbatim string starts with the $ character followed by the @ character. Per altre informazioni sulle stringhe verbatim, vedere gli argomenti relativi a string e all'identificatore verbatim.For more information about verbatim strings, see the string and verbatim identifier topics.

Nota

A partire C# da 8,0, è possibile usare $ i @ token e in qualsiasi ordine: sia $@"..." che @$"..." sono stringhe verbatim interpolate valide.Starting with C# 8.0, you can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings. Nelle versioni C# precedenti il $ token deve essere visualizzato prima del @ token.In earlier C# versions, the $ token must appear before the @ token.

Conversioni implicite e come specificare IFormatProvider l'implementazioneImplicit conversions and how to specify IFormatProvider implementation

Da una stringa interpolata vengono effettuate tre conversioni implicite:There are three implicit conversions from an interpolated string:

  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.Conversion of an interpolated string to a String instance that is the result of interpolated string resolution with interpolation expression items being replaced with the properly formatted string representations of their results. Questa conversione usa per CurrentCulture formattare i risultati dell'espressione.This conversion uses the CurrentCulture to format expression results.

  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.Conversion of an interpolated string to a FormattableString instance that represents a composite format string along with the expression results to be formatted. Questa opzione consente di creare più stringhe risultato con contenuto specifico delle impostazioni cultura da una singola istanza di FormattableString.That allows you to create multiple result strings with culture-specific content from a single FormattableString instance. A tale scopo, chiamare uno dei metodi seguenti:To do that, call one of the following methods:

    È anche possibile usare il metodo ToString(IFormatProvider) per fornire un'implementazione definita dall'utente dell'interfaccia IFormatProvider che supporta la formattazione personalizzata.You also can use the ToString(IFormatProvider) method to provide a user-defined implementation of the IFormatProvider interface that supports custom formatting. Per altre informazioni, vedere la sezione formattazione personalizzata con ICustomFormatter nell'articolo formattazione di tipi in .NET .For more information, see the Custom formatting with ICustomFormatter section of the Formatting types in .NET article.

  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.Conversion of an interpolated string to an IFormattable instance that also allows you to create multiple result strings with culture-specific content from a single IFormattable instance.

L'esempio seguente usa la conversione implicita a FormattableString per creare stringhe di risultato con impostazioni cultura specifiche:The following example uses implicit conversion to FormattableString to create culture-specific result strings:

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 aggiuntiveAdditional resources

Se non si ha familiarità con l'interpolazione di stringhe, vedere l'esercitazione interattiva Interpolazione di stringhe in C#.If you are new to string interpolation, see the String interpolation in C# interactive tutorial. È anche possibile verificare un'altra esercitazione di interpolazione di stringhe in C# che illustra come usare le stringhe interpolate per produrre stringhe formattate.You also can check another String interpolation in C# tutorial that demonstrates how to use interpolated strings to produce formatted strings.

Compilazione di stringhe interpolateCompilation of interpolated strings

Se una stringa interpolata è di tipo string, viene in genere trasformata in una chiamata al metodo String.Format.If an interpolated string has the type string, it's typically transformed into a String.Format method call. Il compilatore può sostituire String.Format con String.Concat se il comportamento analizzato è equivalente alla concatenazione.The compiler may replace String.Format with String.Concat if the analyzed behavior would be equivalent to concatenation.

Se una stringa interpolata dispone del tipo IFormattable o FormattableString, il compilatore genera una chiamata al metodo FormattableStringFactory.Create.If an interpolated string has the type IFormattable or FormattableString, the compiler generates a call to the FormattableStringFactory.Create method.

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere la sezione Stringhe interpolate della specifica del linguaggio C#.For more information, see the Interpolated strings section of the C# language specification.

Vedere ancheSee also