我們開發了一套既可以在所有已知的計算機上運行的軟件。問題是解析以「8」開頭的字符串。 字符串開頭的「8」好像是一個保留字符。「8」的int.Parse失敗。 int.Parse總是需要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
的問題是使用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;
}
更新
我偶然發現這個環節,在微軟連接數據庫的錯誤:
好像有,有着相近的症狀的問題,但沒有真正的根本原因。如果有人能詳細說明這一點,我將不勝感激!
感謝您的注意事項,我照顧它:) 我已經檢查了他的區域設置的註冊表中的值,只有8是有CurrencyNgativePattern這不會幫助我重現錯誤在我的機器上。 你肯定在這裏正軌若昂的。但是,這個問題很難,我不確定微軟是否也知道問題的原因。你肯定會得到一個大起來的,但這種行爲仍然是一個謎。這就是爲什麼我不接受你的答案,儘管我對你的努力表示感謝的解決方案! – 2010-04-27 13:08:04
這個答案的開頭在我看來是錯誤的。在'NumberFormatInfo.CurrencyNegativePattern'和'NumberFormatInfo.CurrencyPositivePattern'僅使用作爲鍵的值 - 來識別負號的順序( - ),貨幣符號,以及將要用於格式化/解析號碼本身。例如,「8」作爲CurrencyNegativePattern'的'值意味着圖案應該是「-n $」。 – 2013-03-01 19:15:13