2013-01-10 30 views
12

Voglio essere in grado di ottenere RegionInfo effettuando le seguenti operazioni:Ottieni informazioni sulla regione in base al nome del paese?

new RegionInfo("United Kingdom"); 

ma questo genera un'eccezione e dice che non è riconosciuto.

Questo page on RegionInfo dice che viene generata un'eccezione se "nome non è un nome di paese/regione valido".

Eppure questo page specifica un elenco di regioni predefinite utilizzate dalla classe che contiene United Kingdom, quindi perché non viene creato un nuovo RegionInfo con nome di paese?

+3

Leggere bene la documentazione: il nome RegionInfo è uno dei codici a due lettere definito in ISO 3166 per paese/regione. –

risposta

28
var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID)); 
    var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(name)); 

Se si desidera ottenere RegionInfo dal nome del paese, si potrebbe ottenere un IEnumerable<RegionInfo> e poi filtrare in base alla EnglishName come sopra. Questo ti dà la possibilità di popolare anche cose come i combobox.

+1

Ma sarebbe nullo poiché 'EnglishName' è" English (United Kingdom) ";-) Quindi potresti voler usare' FirstOrdefault (r => r.EnglishName.Contains (name)) ' –

+0

@LukeHennerley: Sarà essere ancora 'nullo' ma ora senza eccezione. +1 comunque poiché 'Contains' invece di' == 'sarebbe troppo generoso. –

+0

Funziona per me, EnglishName appare come "Regno Unito" – DevDave

0

Guardate la pagina di MSDN:

A string containing one of the two-letter codes defined in ISO 3166 for country/region.

è necessario il codice ISO 3166 per il Regno Unito, non il nome del paese.

Ecco lo code you need.

2

Quella stessa pagina si è collegato anche dice:

Il nome RegionInfo è uno dei codici a due lettere definiti nella norma ISO 3166 per paese/regione. Il caso non è significativo; tuttavia, il nome, TwoLetterISORegionName e le proprietà ThreeLetterISORegionName restituiscono il codice appropriato in maiuscolo.

I codici sono sulla pagina, e GB sembra essere il codice 2 lettera per il Regno Unito (è per il codice di essere alla ricerca difficile!). Quindi provare questo:

new RegionInfo("GB"); 

Oppure, se si sta utilizzando .NET 2.0+, si consiglia di utilizzare il nome completo della cultura:

new RegionInfo("en-GB"); 
+0

Il poster originale collegava una vecchia versione della specifica. Poiché .NET 2.0 si consiglia di utilizzare per es. '" en-GB "' invece di solo '" GB "'. –

+1

Grande. Le altre possibilità con GB sono: _Welsh (Regno Unito) _ '" cy-GB "' e _Scottish Gaelic (Regno Unito) _ '" gd-GB "'. –

2

Da MSDN;

Una stringa che contiene un codice di due lettere definito in ISO 3166 per il paese/regione .

UNITED KINGDOM sembra ok su Country names and code elements sul sito Web ISO.

GB Gran Bretagna

Prova con;

new RegionInfo("GB"); 
+0

Il poster originale collegava una vecchia versione della specifica. Poiché .NET 2.0 si consiglia di utilizzare per es. '" en-GB "' invece di solo '" GB "'. –

0

Nota questo commento dai metadati per il parametro name che spiega il passaggio dal .NET Framework 2.0 su:

//  A string containing one of the two-letter codes defined in ISO 3166 for country/region.-or-Beginning 
    //  in .NET Framework version 2.0, a string containing the culture name for a 
    //  specific culture, custom culture, or Windows-only culture. If the culture 
    //  name is not in RFC 4646 format, your application should specify the entire 
    //  culture name, not just the country/region. 
1

Se ci si dirige verso il costruttore la sintesi vedo in Visual Studio dice:

nome: Una stringa che contiene un codice di due lettere definito nella norma ISO 3166 per paese/regione.-o-Una stringa che contiene il nome della cultura per una cultura specifica, una cultura personalizzata o una cultura solo per Windows . Se il nome della coltura non è nel formato RFC 4646, l'applicazione deve specificare il nome della coltura anziché il solo paese/regione.

L'intero nome della cultura sarebbe "en-GB".

Oppure si potrebbe usare 'GB'

+0

C'è [una versione più recente della pagina doc] (http://msdn.microsoft.com/en-us/library/atwc2921.aspx) rispetto a ciò a cui la domanda originale si collega. Si consiglia di utilizzare una cultura specifica completa, come '" en-GB "', invece di solo '" GB "'. Non sappiamo quale versione del framework è usata dal Poster originale, ma dovrebbe certamente andare con 'new RegionInfo (" en-GB ")'. –

Problemi correlati