2009-08-24 15 views
10

Mam ciąg znaków, który muszę zweryfikować, jeśli jest to kod kraju. Kultura jest niemiecka. Czy jest jakaś metoda, którą mogę wywołać, aby uzyskać listę kodów krajów w kulturze niemieckiej bez konieczności samodzielnego wpisywania wszystkich kodów 274 (?)?Lista kodów krajów - C#

Dzięki, Teja.

Odpowiedz

13

Kiedy mówisz „kod kraju” Zakładam, że oznacza dwuliterowy kod jak w ISO 3166. Następnie możesz użyć konstruktora RegionInfo, aby sprawdzić, czy twój ciąg znaków jest poprawnym kodem.

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

Możesz również, jak podajesz w swoim pytaniu, sprawdzić, czy jest to prawidłowy kod kraju dla języka niemieckiego. Następnie podajesz konkretną nazwę kultury wraz z kodem kraju.

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

Okazuje się, że niemieckie ubezpieczenie zdrowotne korzysta z innego systemu krajów nazw. Wielkości kodu kraju różniły się od 1-3 znaków. Dzięki za pomoc! - Teja 0 sekund temu –

+0

Wow ... to naprawdę dziwne. Gdyby to były tylko trzy litery, odgadłbym, że jest to ISO 3166-1 Alpha 3, który używa trzech liter dla kodu kraju (DEU dla języka niemieckiego). – Ostemar

+0

To jest dziwne; Kody krajów ISO 3166 to wielkie litery. – rds

3

Przyjęta odpowiedź to niewłaściwe użycie narzędzia ArgumentException zgłaszanego przez konstruktora. Tak naprawdę nie używasz instancji RegionInfo ani ArgumentException, co powoduje, że cel kodu jest bardzo niejasny.

Zamiast uzyskać listę wszystkich poszczególnych kultur, a następnie przeglądać regionach tych kultur znaleźć spotkanie na swojej ISO 3166 kod alfa-2:

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

Or specjalnie dla swojego problemu:

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

Oczywiście wykorzystuje to LINQ. – Kjata30

1

Należy zachować ostrożność podczas korzystania z kodu RegionInfo w celu sprawdzenia poprawnego kodu ISO. Zwróci region, jeśli podany przez ciebie kod jest poprawny i jest obsługiwanym regionem, ale nie zrobi tego dla wszystkich ważnych kodów ISO 3166.

Zobacz tutaj pełniejsze wyjaśnienie: https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

RegionInfo będzie działać dobrze dla Europy, ale istnieje kilka krajów afrykańskich, które nie zostały zatwierdzone przy użyciu tej metody (np Uganda).

Powiązane problemy