我们开发了一种成熟的软件,可以在除一台以外的所有已知计算机上正常工作。问题是解析以“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 数据库中的一个错误:
似乎有类似症状的问题,但没有真正的根本原因。如果有人能详细说明这一点,我将不胜感激!