2013-01-10 10 views
12

Ich möchte in der Lage sein RegionInfo zu erhalten, indem Sie folgendermaßen vorgehen:RegionInfo nach Ländername erhalten?

new RegionInfo("United Kingdom"); 

aber dies löst eine Ausnahme aus und sagt, dass es nicht erkannt wird.

Diese page on RegionInfo besagt, dass eine Ausnahme ausgelöst wird, wenn 'Name kein gültiger Länder-/Regionsname' ist.

Und noch diese page spezifiziert eine Liste der vordefinierten Regionen, die von der Klasse verwendet werden, und enthält United Kingdom, also warum erstellt keine neue mit Ländername Arbeit?

+3

Bitte lesen Sie die Dokumentation gut: Der Name RegionInfo ist einer der aus zwei Buchstaben bestehenden Codes, die in ISO 3166 für Land/Region definiert sind. –

Antwort

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

verwenden Wenn Sie RegionInfo durch den Namen des Landes erhalten möchten, können Sie eine IEnumerable<RegionInfo> bekommen konnte und dann filtern basierend auf dem EnglishName wie oben. Dies gibt Ihnen die Möglichkeit, Dinge wie Comboboxen zu füllen.

+1

Aber es wäre null, da der 'EnglishName'" English (United Kingdom) "ist ;-) Also möchten Sie vielleicht' FirstOrdefault (r => r.EnglishName.Contains (name)) ' –

+0

@LukeHennerley: Es wird sei immer noch 'null', aber jetzt ohne Ausnahme. +1 sowieso seit 'Contains' statt' == 'wäre zu großzügig. –

+0

Es funktioniert für mich, EnglishName erscheint als "Vereinigtes Königreich" – DevDave

0

Blick auf der MSDN-Seite:

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

Sie müssen den ISO 3166-Code für das Vereinigte Königreich, nicht den Namen des Landes.

Hier ist die code you need.

2

Am gleichen Seite findet man auch verknüpft sagt:

Der Regionname ist eines der aus zwei Buchstaben bestehenden Codes definiert in ISO 3166 für Land/Region. Der Fall ist nicht signifikant; Der Name, die TwoLetterISORegionName und die ThreeLetterISORegionName -Eigenschaften geben jedoch den entsprechenden Code in Großbuchstaben zurück.

Die Codes sind auf der Seite, und GB erscheint der 2-Buchstaben-Code für das Vereinigte Königreich zu sein (es ist in Code, um schwierige Suche zu sein!). Also versuchen Sie dies:

new RegionInfo("GB"); 

Oder wenn Sie .NET 2.0+ verwenden, ist es empfohlen, dass Sie die vollen Kulturnamen verwenden:

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

Das Original-Poster hat eine alte Version der Spezifikation verlinkt. Seit .NET 2.0 wird empfohlen, z. '" en-GB "' anstatt nur '" GB "'. –

+1

Großartig. Die anderen Möglichkeiten mit GB sind: _Welsh (Vereinigtes Königreich) _ '" cy-GB "' und _Scottish Gaelic (Vereinigtes Königreich) _ '" gd-GB "'. –

2

Von MSDN;

Eine Zeichenfolge, die einen aus zwei Buchstaben bestehenden Code enthält, der in ISO 3166 für Land/Region definiert ist.

UNITED KINGDOM sieht ok auf Country names and code elements auf der ISO-Website.

GB Vereinigtes Königreich

Versuchen mit;

new RegionInfo("GB"); 
+0

Das Original-Poster hat eine alte Version der Spezifikation verlinkt. Seit .NET 2.0 wird empfohlen, z. '" en-GB "' anstatt nur '" GB "'. –

0

Hinweis: dieser Kommentar aus den Metadaten für den Parameter name, die den Wechsel von .NET Framework 2 erklärt.0 auf:

//  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

Wenn ich an den Konstruktor der Zusammenfassung I in Visual Studio sehen navigieren sagt:

Name: Eine Zeichenfolge, die einen zweistelligen Ländercode nach ISO 3166 für enthält country/region.-or-Eine Zeichenfolge, die den Kulturnamen für eine bestimmte Kultur, benutzerdefinierte Kultur oder Nur-Windows-Kultur enthält. Wenn der Kulturname nicht im RFC 4646-Format ist, sollte Ihre Anwendung den gesamten Kulturnamen anstelle nur des Landes/region angeben.

Der gesamte Kulturname wäre "en-GB".

Oder könnten Sie ‚GB‘

+0

Es gibt [eine neuere Version der Doc-Seite] (http://msdn.microsoft.com/en-us/library/atwc2921.aspx) im Vergleich zu der ursprünglichen Frage. Es wird eindeutig empfohlen, eine vollständige spezifische Kultur wie "en-GB" anstelle von "GB" zu verwenden. Wir wissen nicht, welche Version des Frameworks vom Original-Poster verwendet wird, aber er sollte mit 'new RegionInfo (" en-GB ")' gehen. –