Wir entwickeln eine etablierte Software, die auf allen bekannten Computern bis auf einen funktioniert. Das Problem besteht darin, Strings zu analysieren, die mit "8" beginnen. Es scheint, als wäre "8" am Anfang einer Zeichenfolge ein reserviertes Zeichen.Int.Parse von "8" schlägt fehl. int.Parse erfordert immer CultureInfo.InvariantCulture?
Parsing:
int.Parse("8") -> Exception message: Input string was not in a correct format.
int.Parse("80") -> 0
int.Parse("88") -> 8
int.Parse("8100") -> 100
CurrentCulture: sv-SE
CurrentUICulture: en-US
Das Problem wird gelöst, indem int.Parse ("8", CultureInfo.InvariantCulture). Es wäre jedoch schön, die Ursache des Problems zu kennen.
Frage: Warum erhalten wir dieses Verhalten von "8", wenn wir keine invariante Kultur angeben?
Zusätzliche Informationen:
ich ein kleines Programm zu meinem Klienten senden tat das Ergebnis oben erreichen:
private int ParseInt(string s)
{
int parsedInt = -1000;
try
{
parsedInt = int.Parse(s);
textBoxMessage.Text = "Success: " + parsedInt;
}
catch (Exception ex)
{
textBoxMessage.Text =
string.Format("Error parsing string: '{0}'", s) + Environment.NewLine +
"Exception message: " + ex.Message;
}
textBoxMessage.Text += Environment.NewLine + Environment.NewLine +
"CurrentCulture: " + Thread.CurrentThread.CurrentCulture.Name + "\r\n" +
"CurrentUICulture: " + Thread.CurrentThread.CurrentUICulture.Name + "\r\n";
return parsedInt;
}
aktualisieren
ich über gestolpert Link, um ein Fehler in der Microsoft Connect-Datenbank:
Es scheint, wie es mit ähnlichen Symptomen ein Problem ist, aber keine wirkliche Ursache. Wenn jemand das näher ausführen könnte, wäre ich dankbar!
Danke für die Randnotiz, ich kümmerte mich darum :) Ich habe früher die Werte in der Registrierung für seine Gebietsschema-Einstellungen überprüft und die einzige 8 da draußen ist die CurrencyNegativePattern, die mir nicht hilft, den Fehler zu reproduzieren auf meiner Maschine. Sie sind definitiv auf dem richtigen Weg hier João. Dieses Problem ist jedoch sehr schwierig und ich bin mir nicht sicher, ob Microsoft den Grund für das Problem kennt. Du wirst mit Sicherheit ein großes UP bekommen, aber das Verhalten ist immer noch ein Mysterium. Deshalb akzeptiere ich deine Antwort nicht als Lösung, obwohl ich dir für deine Mühe dankbar bin! –
Der Anfang dieser Antwort scheint mir falsch. Die Werte in 'NumberFormatInfo.CurrencyNegativePattern' und' NumberFormatInfo.CurrencyPositivePattern' werden nur als Schlüssel verwendet - um die Reihenfolge von negativem Vorzeichen (-), Währungszeichen und der Zahl selbst zu bestimmen, die zum Formatieren/Parsen verwendet wird. Zum Beispiel bedeutet '8' als Wert von 'CurrencyNegativePattern', dass das Muster '-n $' sein sollte. –