2009-08-24 30 views
10

Tengo una cadena que debo verificar si es un código de país. La cultura es alemana ¿Hay algún método al que pueda llamar para obtener una lista de códigos de país en una cultura alemana sin tener que escribir todos los códigos 274 (?) Yo mismo?Lista de códigos de país - C#

Gracias, Teja.

Respuesta

13

Cuando dice "código de país" Supongo que significa el código de dos letras como en ISO 3166. Luego puede usar el constructor de RegionInfo para verificar si su cadena es un código correcto.

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

Se podría también, como usted indica en su pregunta, y comprueba si se trata de un código de país válido para el idioma alemán. Luego, solo debe ingresar un nombre de cultura específico junto con el código de país.

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

Resulta que el seguro de salud alemán utiliza un sistema diferente de nombres de países. Los tamaños de los códigos de país varían de 1-3 caracteres. ¡Gracias por la ayuda! - Teja 0 segundos atrás –

+0

Wow ... eso es realmente extraño. Si solo fueran tres letras, habría supuesto que era ISO 3166-1 Alpha 3 que usa tres letras para el código de país (DEU para alemán). – Ostemar

+0

Esto es extraño; Los códigos de país ISO 3166 son mayúsculas. – rds

0

http://cldr.unicode.org/ - la base de datos en varios idiomas estándar común incluyen la lista de países y otros datos localizables.

3

La respuesta aceptada es un uso indebido del ArgumentException lanzado por el constructor. Realmente no está utilizando las instancias RegionInfo o ArgumentException, lo que hace que el propósito del código sea muy poco claro.

En su lugar, obtener una lista de todas las culturas específicas, a continuación, buscar a través de las regiones de esas culturas para encontrar una coincidencia en su ISO 3166 alfa-2 Código:

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

o específicamente, para su 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

Obviamente esto usa LINQ. – Kjata30

1

Tenga cuidado al usar RegionInfo para verificar si hay un código ISO válido. Devolverá una región si el código que proporciona es válido Y es una región admitida, pero no lo hará para todos los códigos ISO 3166 válidos.

ver aquí para una explicación más completa: https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

RegionInfo va a funcionar bien para Europa, pero hay varios países africanos que no son validados con este método (por ejemplo, Uganda).

Cuestiones relacionadas