C# – Come usare le stringhe di formato con l'interpolazione di stringhe

C# – Come usare le stringhe di formato con l'interpolazione di stringhe

Le stringhe interpolate hanno la seguente struttura:{variable:format}. In genere escludi il formato, quindi normalmente hanno questo aspetto:$"Mi chiamo {nome}".

Ecco come utilizzare le stringhe di formato con una stringa interpolata:

decimal orderAmount = 10.2322m;
Console.WriteLine($"You owe: {orderAmount:C}");
Code language: C# (cs)

Questo produce quanto segue:

You owe: $10.23Code language: plaintext (plaintext)

Questo è l'equivalente di usare string.Format() in questo modo:

string.Format("{0:C}", orderAmount)
Code language: C# (cs)

Come puoi vedere, specificare una stringa di formato con una stringa interpolata è praticamente lo stesso di come lo faresti con string.Format(). In effetti, puoi utilizzare tutte le stesse stringhe di formato standard e stringhe di formato personalizzate. L'unica cosa leggermente diversa è il modo in cui specifichi la cultura.

In questo articolo mostrerò altri esempi di utilizzo di stringhe di formato con stringhe interpolate, incluso come specificare le impostazioni cultura.

Specificare la cultura

Per impostazione predefinita, le stringhe interpolate utilizzano le impostazioni cultura correnti. Se vuoi specificare le impostazioni cultura, devi eseguire il cast della stringa interpolata come FormattableString, quindi chiamare .ToString() su di essa e passare le impostazioni cultura.

Questo è abbastanza prolisso. Puoi dividerlo in più righe o avere una singola riga molto densa, come segue:

//multiple lines
FormattableString s = $"You owe: {orderAmount:C}";
var f = s.ToString(CultureInfo.GetCultureInfo("en-GB"));
Console.WriteLine(f);

//very dense 1 liner
Console.WriteLine(((FormattableString)$"You owe: {orderAmount:C}").ToString(CultureInfo.GetCultureInfo("en-GB")));
Code language: C# (cs)

Questo produce quanto segue:

You owe: £10.23Code language: plaintext (plaintext)

Ciò equivale al seguente approccio string.Format():

string.Format(CultureInfo.GetCultureInfo("en-GB"), "You owe: {0:C}", orderAmount)
Code language: C# (cs)

Potresti preferire l'approccio string.Format() qui. È meno dettagliato, ma perdi i vantaggi dell'interpolazione delle stringhe.

Altre stringhe di formato

È possibile utilizzare qualsiasi stringa di formato standard o stringhe di formato personalizzate con interpolazione di stringhe. Mostrerò alcuni altri esempi di seguito.

1 – Mostra solo le ultime 3 cifre decimali

Di seguito viene illustrato come utilizzare una stringa di formato personalizzata per mostrare gli ultimi 3 decimali di un numero:

decimal orderAmount = 10.2322m;
Console.WriteLine($"3 decimal places: {orderAmount:0.###}");
Code language: C# (cs)

Questo produce quanto segue:

3 decimal places: 10.232Code language: plaintext (plaintext)

2 – Mostra l'ora corrente, incluso l'offset del fuso orario

Questo mostra come utilizzare una stringa di formato data/ora personalizzata per mostrare l'offset di ora e fuso orario.

DateTime now = DateTime.Now;
Console.WriteLine($"Current time: {now:h:mm:ss tt K}");
Code language: C# (cs)

Questo produce quanto segue:

Current time: 8:13:12 AM -05:00Code language: plaintext (plaintext)

3 – Mostra un numero di telefono nel formato degli Stati Uniti

Questo mostra come utilizzare una stringa di formato personalizzata per visualizzare un numero di telefono degli Stati Uniti a 10 cifre (nota:questo è un numero di telefono falso) .

long phone = 5555555555;
Console.WriteLine($"Phone number: {phone:(###) ###-####}");
Code language: C# (cs)

Questo produce quanto segue:

Phone number: (555) 555-5555Code language: plaintext (plaintext)