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

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

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

5 ответов


когда вы говорите "код страны", я предполагаю, что вы имеете в виду двухбуквенный код, как в 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
}

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


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

вместо этого, получить список всех конкретных культур, а затем поиск по регионам этих культур, чтобы найти соответствие на вашем ISO 3166 альфа - 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);
}

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

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

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


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