Мы разрабатываем установленное программное обеспечение, которое отлично работает на всех известных компьютерах, кроме одного. Проблема состоит в том, чтобы проанализировать строки, начинающиеся с "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:
Кажется, что есть проблема с похожими симптомами, но нет реальной причины. Если бы кто-нибудь мог подробно остановиться на этом, я был бы благодарен!