2009-06-12 5 views
4

Ich erhalte eine CA1305 Warnung.CA1305: int.Parse (String)

Microsoft.Globalization: Da das Verhalten von 'int.Parse (string)' auf den Locale-Einstellungen des aktuellen Benutzers basierend variieren könnte, diesen Aufruf ersetzen in ‚_Default.CalculateImageButton_Click (Objekt, ImageClickEventArgs) 'mit einem Aufruf an ' int.Parse (Zeichenfolge, IFormatProvider) '. Wenn das Ergebnis 'int.Parse (string, IFormatProvider)' dem Benutzer angezeigt wird, geben Sie 'CultureInfo.CurrentCulture' als 'IFormatProvider' Parameter an. Andernfalls, wenn das Ergebnis gespeichert und von Software, wie , wie wenn es auf Festplatte oder eine Datenbank persistent ist, geben Sie 'CultureInfo.InvariantCulture'.

Was genau kann schief gehen, wenn ich die Kultur bei der Analyse von Int32 weglasse?

Antwort

9

Es bedeutet, dass, wenn Sie "1,234" aus einer Datendatei oder einem Datenbankeintrag lesen, versuchen Sie es über Int. Zu einem Int zu konvertieren, erhalten Sie 1234 in Amerika und 1 in Deutschland. Die Warnung gibt einen guten Ratschlag - wenn Sie mit dem Benutzer interagieren, geben Sie CurrentCulture an (danke Andrew!), Und wenn Sie mit einem Dateisystem oder einer Datenbank (oder irgendwas! Benutzer) interagieren, verwenden Sie InvariantCulture

+1

Ich glaube, CurrentUICulture ist nur zum Ziehen von String-Ressourcen. Für alle Formatierungen sollten Sie CurrentCulture verwenden (beachten Sie die fehlende Benutzeroberfläche). Andernfalls führen bestimmte Kulturen dazu, dass der Code ausgelöst wird. Siehe http://code.google.com/p/dotnetopenid/issues/detail?id=60 für ein Beispiel für einen Fehler, der dadurch verursacht wird. –

1

Wenn Sie sind Wenn Sie eine Ganzzahl analysieren, kann sie tausend Trennzeichen enthalten, die "," oder "." sein können. abhängig von der Ländereinstellung.