2014-04-05 13 views
10

ReSharper mi avverte che ho bisogno di specificare una stringa quando la cultura fa un int.ToString()Perché specificare la cultura nella conversione String

Ad esempio:

int Value = Id.ToString(); // Where Id is an int 

'solo ReSharper essere pedante, o c'è una ragione per cui ho bisogno di dare un'impostazione cultura per convertire un int in una stringa?

E se c'è un motivo per farlo - qual è il migliore da usare, quando il mio sito è utilizzato in tutto il mondo? Dovrebbe semplicemente riflettere le impostazioni del server, in modo che la conversione interna sia fatta in sicurezza?

risposta

13

Perché, ad esempio, le culture inglesi utilizzano "." come punto decimale, dove le culture francesi usano "," e il contrario per separare le migliaia. La specifica di una cultura rimuove questa ambiguità in modo che il codice venga eseguito in modo identico sui sistemi operativi Windows configurati per lingue diverse, in particolare se i valori analizzati vengono trasferiti alla memoria permanente.

+1

Ma .NET non lo basa sulle attuali informazioni sulla cultura dei thread? In questo modo lo serializzerà correttamente per l'utente che lo sta usando? Il mio punto è che gli utenti vogliono vederlo nella loro cultura, non in qualche altra cultura che non capiranno, quindi perché Resharper lo suggerisce? –

+1

Lo fa, ma ReSharper (e FXCop su cui è basato) lo indicano come "hai davvero intenzione di fare questo" tipo di cosa. È meglio essere espliciti e utilizzare CultureInfo.CurrentCulture se si vuole veramente questo comportamento. Altrimenti usa CultureInfo.InvariantCulture –

+0

Ah, perfetto! Ho dimenticato i decimali. Nel mio caso, sto prendendo una colonna di identità SQL, INT, che credo sarà sempre un numero intero e convertendola in una stringa per il valore di una casella a discesa dell'interfaccia utente. La tua risposta spiega dove altro sarebbe utile. Immagino quindi che finché uso "CultureInfo.InvariantCulture", tutto sarà uniforme? – Craig

4

Il motivo è che la rappresentazione in formato stringa di un numero varia da paese a paese.

Alcuni usano un '.' come il separatore delle migliaia, alcuni usano ',', alcuni semplicemente non usano alcun simbolo.

Il sovraccarico di ToString senza parametro utilizza la cultura corrente in modo che l'output vari in base alle impostazioni del computer.

Detto questo, la mia regola è:

  • ogni rappresentazione interna deve essere InvariantCulture (mai relais inserito impostazioni del server!)
  • tutto sulla presentazione deve utilizzare impostazioni locali dell'utente finale

Spero che sia utile

Problemi correlati