Для культуры 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
должен интерпретировать входные данные как целое число по умолчанию, поэтому я не понимаю, почему вы получаете ошибку с этим примером кода.
Обновление:
Из информации, которую вы недавно добавили, кажется, что вы должны убедиться, что проблема не является внешней. Это если, например, пользователь изменил настройку положительного знака языкового стандарта Windows на 8
, это было бы нормально и имело бы смысл для вас получить ошибку, которую вы получаете. Это все равно что установить +
в качестве положительного знака, а затем попытаться разобрать его:
var ci = new CultureInfo("sv-SE");
var nfi = (NumberFormatInfo)ci.GetFormat(typeof(NumberFormatInfo));
nfi.PositiveSign = "+";
Int32.Parse("+", nfi); // This will throw
Попросите пользователя указать его настройки реестра, как указано в проблеме с подключением, и убедитесь, что они соответствуют вашим ожиданиям.
Примечание: Добро пожаловать в SO, и, кстати, в следующий раз, когда вам нужно будет добавить дополнительную информацию к вашему вопросу, вы должны отредактировать ее, а не предоставлять ее в ответе.