Список кодов стран — C#

У меня есть строка, которую мне нужно проверить, является ли она кодом страны. Культура немецкая. Есть ли какой-либо метод, который я могу вызвать, чтобы получить список кодов стран в немецкой культуре без необходимости самостоятельно вводить все 274 (?) Кода?

Спасибо, Теджа.


person Tejaswi Yerukalapudi    schedule 24.08.2009    source источник


Ответы (6)


Когда вы говорите «код страны», я предполагаю, что вы имеете в виду двухбуквенный код, как в ISO 3166. Затем вы можете использовать конструктор RegionInfo, чтобы проверить, является ли ваша строка правильным кодом.

string countryCode = "de";
try {
    RegionInfo info = new RegionInfo(countryCode);
}
catch (ArgumentException argEx)
{
    // The code was not a valid country code
}

Вы также можете, как вы указали в своем вопросе, проверить, является ли это допустимым кодом страны для немецкого языка. Затем вы просто передаете название определенной культуры вместе с кодом страны.

string language = "de";
string countryCode = "de";
try {
    RegionInfo info = new RegionInfo(string.Format("{0}-{1}", language, countryCode));
}
catch (ArgumentException argEx)
{
    // The code was not a valid country code for the specified language
}
person Ostemar    schedule 24.08.2009
comment
Оказывается, немецкая система медицинского страхования использует другую систему наименования стран. Размер кода страны варьировался от 1 до 3 символов. Спасибо за помощь! – Теджа 0 секунд назад - person Tejaswi Yerukalapudi; 25.08.2009
comment
Вау.. это действительно странно. Если бы это были только три буквы, я бы предположил, что это ISO 3166-1 Alpha 3, в котором используются три буквы для кода страны (DEU для немецкого). - person Ostemar; 25.08.2009
comment
RegionInfo не полностью соответствует ISO 3166. Есть несколько исключений из этого списка, например, Кипр (CY) находится в списке ISO 3166, но не распознается RegionInfo. - person Edwin van Vliet; 15.09.2016

Принятый ответ - это неправильное использование ArgumentException, выброшенного конструктором. На самом деле вы не используете экземпляры RegionInfo или ArgumentException, что делает назначение кода очень неясным.

Вместо этого получите список всех конкретных культур, а затем выполните поиск в регионах этих культур, чтобы найти совпадение с вашим кодом ISO 3166 alpha-2:

bool IsCountryCodeValid(string countryCode)
{
    return CultureInfo
        .GetCultures(CultureTypes.SpecificCultures)
            .Select(culture => new RegionInfo(culture.LCID))
                .Any(region => region.TwoLetterISORegionName == countryCode);
}

Или конкретно для вашей проблемы:

bool IsValidGermanCountryCode(string countryCode)
{
    return CultureInfo
        .GetCultures(CultureTypes.SpecificCultures)
            .Where(culture => culture.TwoLetterISOLanguageName == "de")
                .Select(culture => new RegionInfo(culture.LCID))
                    .Any(region => region.TwoLetterISORegionName == countryCode);
}
person Kjata30    schedule 28.01.2015
comment
Очевидно, что это использует LINQ. - person Kjata30; 29.01.2015

Если вам нужны только страны/регионы, вы можете использовать класс RegionInfo: http://msdn.microsoft.com/en-us/library/system.globalization.regioninfo.aspx

person Agent_9191    schedule 24.08.2009

http://cldr.unicode.org/ — общая стандартная многоязычная база данных, включающая список стран и другие локализуемые данные.

person Kuvalda.Spb.Ru    schedule 08.02.2011

Будьте осторожны при использовании RegionInfo для проверки действительного кода ISO. Он вернет регион, если предоставленный вами код действителен И это поддерживаемый регион, но он не будет делать это для всех допустимых кодов ISO 3166.

См. здесь более полное объяснение: cy" rel="nofollow">https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

RegionInfo подойдет для Европы, но есть несколько африканских стран, которые не прошли проверку с помощью этого метода (например, Уганда).

person Alasdair Ross    schedule 08.01.2016

Вы можете использовать мой пакет nuget Nager.Country. По каждой стране доступно много дополнительной информации. Для получения дополнительной информации посетите проект Github.

PM> install-package Nager.Country
var countryCode = "de";
ICountryProvider countryProvider = new CountryProvider();
var countryInfo = countryProvider.GetCountry(countryCode);
if (countryInfo != null)
{
    //country exists
}
person Tino Hager    schedule 29.12.2020