2014-07-16 7 views
5

Ho codice che è stato scritto in origine per un mercato di lingua inglese in cui il separatore decimale è "" quindi si aspettano valori numerici come stringhe da usare "." come separatore. Ma ora abbiamo utenti in altri luoghi, ad esempio in Europa, dove il separatore decimale è ",".Cercando di impostare il separatore decimale per la lingua corrente, ottenendo "Istanza è di sola lettura"

Così, nel contesto del mio software (in realtà solo il thread corrente) Voglio ignorare il separatore decimale per la lingua corrente di essere "" anche se per impostazione predefinita è qualcos'altro.

ho cercato

String sep = "."; 
    NumberFormatInfo nfi1 = NumberFormatInfo.CurrentInfo; 
    nfi1.NumberDecimalSeparator = sep; 

ma ottengo un "istanza è di sola lettura" eccezione nella terza riga. Apparentemente NumberFormatInfo non è scrivibile. Quindi, come si imposta il separatore decimale della lingua corrente su un valore diverso da quello predefinito?

+0

È necessario impostare 'Thread.CurrentCulture' a una nuova istanza ** ** di' CultureInfo' e apportare modifiche a tale istanza. –

risposta

11

È necessario creare una nuova cultura e si può utilizzare la cultura corrente come modello e modificare solo il separatore. Quindi è necessario impostare la cultura corrente su quella appena creata in quanto non è possibile modificare direttamente la proprietà all'interno della cultura corrente.

string CultureName = Thread.CurrentThread.CurrentCulture.Name; 
CultureInfo ci = new CultureInfo(CultureName); 
if (ci.NumberFormat.NumberDecimalSeparator != ".") 
{ 
    // Forcing use of decimal separator for numerical values 
    ci.NumberFormat.NumberDecimalSeparator = "."; 
    Thread.CurrentThread.CurrentCulture = ci; 
} 
+0

Cosa si intende per "Thread" in "Thread.currentThread ..." Sto diventando "Il nome del filo" non esiste nel contesto corrente" dal compilatore. – user316117

+1

@ user316117 probabilmente Hai bisogno di una' utilizzando System.Threading ;. 'nella parte superiore del vostro file di codice "thread" è la classe System.Threading.Thread – pmcoltrane

+0

@pmcoltrane Sì, che è stato, grazie – user316117

1

È possibile utilizzare il metodo Clone() nell'istanza NumberFormatInfo, che creerà una versione mutabile (cioè IsReadOnly = false). Siete quindi in grado insieme il simbolo di valuta e/o altre opzioni di formato numero:

string sep = "."; 
NumberFormatInfo nfi1 = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); 
nfi1.NumberDecimalSeparator = sep; 
Problemi correlati