私たちは、1 台を除くすべての既知のコンピューターで正常に動作する確立されたソフトウェアを開発しています。問題は、「8」で始まる文字列を解析することです。文字列の先頭にある「8」は予約文字のようです。
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
問題はint.Parse("8", CultureInfo.InvariantCulture)を使用して解決されます。ただし、問題の原因がわかると便利です。
質問:インバリアント カルチャを指定しないと、この "8" の動作になるのはなぜですか?
追加情報:
上記の結果を達成するための小さなプログラムをクライアントに送信しました。
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;
}
アップデート
Microsoft Connect データベースのバグであるこのリンクに出くわしました。
同様の症状で問題があるようですが、本当の根本原因はありません。誰かがこれについて詳しく説明できれば、私は感謝します!