2014-04-05 12 views
10

ReSharper warnt mich, dass ich einen String Kultur angeben muß, wenn ein int.ToString tun()Warum geben Sie Kultur in String Umwandlung

Zum Beispiel:

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

Ist das nur resharper pedantisch, Oder gibt es einen Grund, dass ich eine Kultur Einstellung für die Umwandlung eines Int in eine Zeichenfolge geben muss?

Und wenn es einen Grund gibt, dies zu tun - was ist das Beste zu verwenden, wenn meine Website rund um den Globus verwendet wird? Sollte es nur die Servereinstellungen wiedergeben, damit die interne Konvertierung sicher erfolgt?

Antwort

13

Weil zum Beispiel englische Kulturen '.' als ein Dezimalpunkt, wo wie französische Kulturen "," und das Gegenteil, um Tausende zu trennen. Durch die Angabe einer Kultur wird diese Mehrdeutigkeit beseitigt, so dass Code auf Windows-Betriebssystemen, die für verschiedene Sprachen konfiguriert sind, identisch ausgeführt wird, insbesondere wenn die analysierten Werte an den permanenten Speicher übergeben werden.

+1

Aber basiert nicht .NET es von der aktuellen Fadenkulturinfo? So wird es seriell für den Benutzer, der es benutzt, serialisiert? Mein Punkt ist, dass die Benutzer es in ihrer Kultur sehen wollen, nicht in einer anderen Kultur, die sie nicht verstehen werden. Warum also sollte Resharper das vorschlagen? –

+1

Es funktioniert, aber ReSharper (und FXCop, auf dem es basiert) weisen darauf hin, dass es sich um eine "did you really" handelt. Es ist besser, explizit zu sein und CultureInfo.CurrentCulture zu verwenden, wenn Sie dieses Verhalten wirklich wollen. Ansonsten benutze CultureInfo.InvariantCulture –

+0

Ah, perfekt! Ich habe die Dezimalstellen vergessen. In diesem Fall verwende ich eine SQL-Identitätsspalte INT, von der ich glaube, dass sie immer eine ganze Zahl ist, und wandle sie in eine Zeichenfolge für den Wert einer UI-Dropdown-Box um. Ihre Antwort erklärt, wo sonst dies nützlich wäre. Ich rate dann, dass, solange ich "CultureInfo.InvariantCulture" verwende, alle einheitlich sein werden? – Craig

4

Der Grund ist, dass die String-Darstellung einer Zahl von Land zu Land variieren.

Einige verwenden ein '.' Als Tausendertrennzeichen verwenden manche ',', manche verwenden gar kein Symbol.

Die ToString-Überladung ohne Parameter verwendet die aktuelle Kultur, sodass die Ausgabe je nach den Computereinstellungen variiert.

Wie gesagt, meine Faustregel:

  • jede interne Darstellung muss InvariantCulture (nie auf Servereinstellungen Relais!)
  • alles auf der Präsentation muss Endbenutzers locale
verwenden

Hoffe es hilft