Ответ 1
Для культуры sv-SE
8
представляет CurrencyNegativePattern
и почему вы получаете описанную вами ошибку.
Вы можете проверить это, выполнив следующий пример:
var ci = new CultureInfo("sv-SE");
var nfi = (NumberFormatInfo)ci.GetFormat(typeof(NumberFormatInfo));
Console.WriteLine(nfi.CurrencyNegativePattern);
Console.WriteLine(nfi.CurrencyPositivePattern);
Это выведет:
// 8
// 3
Вы можете явно сказать, что вы обрабатываете целое число, а не валюту, используя перегрузку Parse
, которая принимает перечисление NumberStyles
.
Int32.Parse("8", NumberStyles.Integer, new CultureInfo("sv-SE"));
На этот раз, так как вы указываете, что синтаксический анализ целого числа, ошибка не будет.
Тем не менее, IIRC Int32.Parse
должен интерпретировать ввод как целое по умолчанию, поэтому почему вы попадаете на ошибку с этим примером кода вне меня.
Update:
Из недавно добавленной вами информации кажется, что вы должны убедиться, что проблема не является внешней. Это означает, что если пользователь, например, изменил настройку положительного знака локали Windows на 8
, это было бы нормально, и вам было бы разумно получить полученную вами ошибку. Это было бы как установка +
в качестве положительного знака, а затем попытка его разбора:
var ci = new CultureInfo("sv-SE");
var nfi = (NumberFormatInfo)ci.GetFormat(typeof(NumberFormatInfo));
nfi.PositiveSign = "+";
Int32.Parse("+", nfi); // This will throw
Задайте пользователю параметры локального реестра, как указано в проблеме Connect, и убедитесь, что они являются тем, что вы ожидаете.
Боковое примечание: Добро пожаловать в SO и, кстати, в следующий раз, когда вам нужно добавить дополнительную информацию к своему вопросу, вы должны отредактировать ее, а не предоставлять ее в ответ.