Получить RegionInfo по названию страны?
Я хочу получить RegionInfo
, выполнив следующие действия:
new RegionInfo("United Kingdom");
но это вызывает исключение и говорит, что оно не распознается.
Эта страница в RegionInfo говорит, что исключение вызывается, если "имя не является допустимым именем страны/региона".
И все же эта страница указывает список предопределенных областей, используемых классом, который содержит United Kingdom
, поэтому почему не создается новый RegionInfo
с название страны?
Ответы
Ответ 1
var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID));
var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(name));
Если вы хотите получить RegionInfo
по названию страны, вы можете получить IEnumerable<RegionInfo>
, а затем фильтровать на основе EnglishName
, как указано выше. Это дает вам возможность заполнять такие вещи, как comboboxes.
Ответ 2
На этой же странице вы также указали:
Имя RegionInfo является одним из двухбуквенных кодов, определенных в ISO 3166 для страны/региона. Дело не имеет значения; однако, Имя, TwoLetterISORegionName и свойства ThreeLetterISORegionName верните соответствующий код в верхнем регистре.
Коды находятся на странице, а GB
- это 2-буквенный код для Великобритании (это сложный поиск кода!). Поэтому попробуйте следующее:
new RegionInfo("GB");
Или, если вы используете .NET 2.0+, рекомендуется использовать полное имя культуры:
new RegionInfo("en-GB");
Ответ 3
Из MSDN;
Строка, содержащая двухбуквенный код, определенный в ISO 3166 для страна/регион.
UNITED KINGDOM
выглядит нормально на Названия стран и элементы кода на веб-сайте ISO.
GB СОЕДИНЕННОЕ КОРОЛЕВСТВО
Попробуйте с помощью
new RegionInfo("GB");
Ответ 4
Если я перейду к конструктору, то резюме, которое я вижу в Visual Studio, говорит:
name. Строка, содержащая двухбуквенный код, определенный в ISO 3166, для country/region.-or-A, которая содержит название культуры для специфической культуры, пользовательской культуры или культуры Windows. Если название культуры не указано в формате RFC 4646, ваша заявка должна укажите название всей культуры, а не только страну/region.
Название всей культуры будет "en-GB".
Или вы можете использовать 'GB'
Ответ 5
Посмотрите страницу MSDN:
A string containing one of the two-letter codes defined in ISO 3166 for country/region.
Вам нужен код ISO 3166 для Великобритании, а не название страны.
Здесь код, который вам нужен.
Ответ 6
Обратите внимание на этот комментарий из метаданных для параметра name
, который объясняет изменение с .NET Framework 2.0 на:
// A string containing one of the two-letter codes defined in ISO 3166 for country/region.-or-Beginning
// in .NET Framework version 2.0, a string containing the culture name for a
// specific culture, custom culture, or Windows-only culture. If the culture
// name is not in RFC 4646 format, your application should specify the entire
// culture name, not just the country/region.