2015-10-18 10 views
21

In C# 6 qual è la cultura predefinita per la nuova interpolazione della stringa?Qual è la cultura di default per l'interpolazione di stringa C# 6?

Ho visto rapporti contrastanti sia sulla cultura invariabile sia su quella corrente.

Vorrei una risposta definitiva e sto incrociando le dita per Invariant.

+0

Ho downvoted perché questa domanda non mostra alcuno sforzo di ricerca. – Krythic

+6

Ho fatto molte ricerche prima di pubblicare questa domanda, avevo trovato alcune fonti incluso lo stackoverflow che diceva Invariant. Ho trovato altre fonti incluso lo stackoverflow che diceva la cultura attuale. Questo è il motivo per cui ho fatto la domanda. Grazie. –

+0

@AaronStainback effettivamente ci sono molte domande in SO da persone che hanno scoperto che non potevano usare InvariantCulture con l'interpolazione. Sentiti libero di votare a bassa voce chi dice di usare InvariantCulture. In ogni caso, basta cambiare Thread.CurrentCulture in un test unitario per mostrare questo –

risposta

33

L'uso dell'interpolazione di stringa in C# viene compilato in una semplice chiamata a String.Format. Si può vedere con TryRolsyn che questo:

public void M() 
{ 
    string name = "bar"; 
    string result = $"{name}"; 
} 

viene compilato in questo:

public void M() 
{ 
    string arg = "bar"; 
    string text = string.Format("{0}", arg); 
} 

E 'chiaro che questo non fa uso di un sovraccarico che accetta un provider di formato, hence it uses the current culture.

È comunque possibile compilare l'interpolazione in FormattbleString invece che mantiene il formato e gli argomenti separare e passare una cultura specifica quando si genera la stringa finale:

FormattableString formattableString = $"{name}"; 
string result = formattableString.ToString(CultureInfo.InvariantCulture); 

Ora, poiché (come si preferisce) è molto comune l'uso di InvariantCulture in particolare c'è una stenografia per questo:

string result = FormattableString.Invariant($"{name}"); 
+9

Potrebbe essere utile menzionare il ['FormattableString.Invariant'] (https://msdn.microsoft.com/en-us/library/system.formattablestring .invariant (v = vs.110) .aspx) metodo è disponibile solo da .Net Framework 4.6 in poi. –

+1

Per risparmiare durante la digitazione, è possibile utilizzare 'C# 6.0 statico usando System.FormattableString statico; quindi è sufficiente digitare' String result = Invariant ($ "foo {bar} baz"); '. – Dai

Problemi correlati