Список кодов стран - C # - PullRequest
10 голосов
/ 24 августа 2009

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

Спасибо, Тея.

Ответы [ 5 ]

14 голосов
/ 25 августа 2009

Когда вы говорите «код страны», я предполагаю, что вы подразумеваете двухбуквенный код, как в 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
}
4 голосов
/ 29 января 2015

Принятый ответ - неправильное использование 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);
}
3 голосов
/ 24 августа 2009

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

1 голос
/ 08 января 2016

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

Более подробное объяснение см. Здесь: https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

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

0 голосов
/ 08 февраля 2011

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

...