CultureInfo.CurrentCulture è davvero necessario in String.Format ()?
-
19-08-2019 - |
Domanda
Come pensi che sia davvero necessario fornire IFormatProvider
nel metodo String.Format (stringa, oggetto)
?
È meglio scrivere una variante completa
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
o solo
String.Format("String is {0}", str);
Soluzione
In generale, ti consigliamo di utilizzare InvariantCulture se la stringa che stai generando deve essere mantenuta in modo indipendente dalla cultura dell'utente corrente (ad esempio nel registro o in un file).
Si desidera utilizzare CurrentCulture per le stringhe che devono essere presentate nell'interfaccia utente all'utente corrente (moduli, report).
Possono sorgere bug sottili se usi CurrentCulture dove dovresti usare InvariantCulture: bug che vengono alla luce solo quando hai più utenti con culture diverse che accedono alla stessa voce di registro o file o se un utente cambia la sua cultura predefinita.
Specifica esplicitamente CurrentCulture (il valore predefinito se l'argomento IFormatProvider è omesso), è essenzialmente la documentazione che dimostra che hai considerato quanto sopra e che la stringa generata deve usare la cultura dell'utente corrente. Ecco perché FxCop consiglia di specificare l'argomento IFormatProvider.
Altri suggerimenti
Se non si specifica IFormatProvider
(o si passa equivalentemente null
) la maggior parte dei tipi di argomenti finirà per essere formattata in base a CultureInfo.CurrentCulture
. La cosa interessante è che puoi specificare un IFormatProvider
personalizzato che può ottenere il primo crack nella formattazione degli argomenti o sovrascrivere la cultura della formattazione a seconda dell'altro contesto.
Nota che CultureInfo.CurrentCulture
influenza la formattazione degli argomenti, non la selezione delle risorse; la selezione delle risorse è controllata da CultureInfo.CurrentUICulture
.
No, non è necessario specificare la cultura a meno che la stringa non contenga elementi specifici della cultura come separatori decimali, valuta, ecc., che devono essere resi in base alla cultura.
È particolarmente utile se ti interessa la localizzazione (globalizzazione) nella tua applicazione. Cioè, se vuoi che la tua app supporti più lingue e formati specifici di una cultura, dovresti usarla.