2009-08-24 5 views
10

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

Thanks, Teja.

ответ

13

Когда вы говорите «код страны» Я предполагаю, что вы имеете в виду два-буквенный код, как и в 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 
} 
+0

Оказалось, что медицинская страховка Германии использует другую систему стран-имен. Размеры кода страны варьировались от 1-3 символов. Спасибо за помощь, хотя! - Teja 0 сек. Назад –

+0

Ничего себе .. это действительно странно. Если бы это было всего три письма, я бы предположил, что это ISO 3166-1 Alpha 3, который использует три буквы для кода страны (DEU для немецкого языка). – Ostemar

+0

Это странно; Код страны ISO 3166 - это верхний регистр. – rds

0

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

3

Принятый ответ - неправильное использование созданного конструктором 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); 
} 
+0

Очевидно, что это использует LINQ. – Kjata30

1

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

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

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

Смежные вопросы