2009-08-24 17 views
10

Ho una stringa che devo verificare se si tratta di un codice Paese. La cultura è tedesca. C'è un metodo che posso chiamare per ottenere un elenco di codici Paese in una cultura tedesca senza dover digitare tutti i 274 (?) Codici da solo?Elenco codici paese - C#

Grazie, Teja.

risposta

13

Quando si dice "country code" Suppongo si intende il codice di due lettere come in ISO 3166. Quindi è possibile utilizzare il costruttore RegionInfo per verificare se la stringa è un codice corretto.

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

Si potrebbe anche, come affermate nella sua interrogazione, verificare se si tratta di un codice paese valido per la lingua tedesca. Quindi devi solo inserire un nome di cultura specifico insieme al prefisso del paese.

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

Si scopre che l'assicurazione sanitaria tedesca utilizza un diverso sistema di paesi di denominazione. Le dimensioni dei codici paese variavano da 1 a 3 caratteri. Grazie per l'aiuto! - Teja 0 secondi fa –

+0

Wow..questo è davvero strano. Se fossero solo tre lettere avrei immaginato che fosse ISO 3166-1 Alpha 3 che utilizza tre lettere per il prefisso del paese (DEU per il tedesco). – Ostemar

+0

Questo è strano; I codici ISO 3166 sono in maiuscolo. – rds

0

http://cldr.unicode.org/ - comune banca dati multilingue di serie includono lista paese e altri dati localizzabili.

3

La risposta accettata è un uso improprio dello ArgumentException generato dal costruttore. Non stai davvero utilizzando le istanze RegionInfo o ArgumentException, il che rende molto poco chiaro lo scopo del codice.

Invece, ottenere un elenco di tutte le culture specifiche, quindi cercare attraverso le regioni di quelle culture per trovare una corrispondenza sul vostro codice ISO 3166 alpha-2:

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

o specificamente, per il vostro problema:

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

Ovviamente questo usa LINQ. – Kjata30

1

Fare attenzione quando si utilizza RegionInfo per verificare un codice ISO valido. Restituirà una regione se il codice che fornisci è valido E si tratta di una regione supportata, ma non lo farà per tutti i codici ISO 3166 validi.

Vedi qui per una spiegazione più completa: https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

RegionInfo funzionerà bene per l'Europa, ma ci sono diversi paesi africani che non vengono convalidati con questo metodo (ad esempio Uganda).

Problemi correlati