Krótko, jeżeli potrzebujecie listę krajów dla combobox wystarczy wam taki o to fragment kodu:
public static Dictionary<string, string> GetCountries()
{
var countries = new Dictionary<string, string>();
foreach (var cultureInfo in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
RegionInfo regionInfo = null;
try
{
regionInfo = new RegionInfo(cultureInfo.LCID);
}
catch(Exception)
{
continue;
}
if (!countries.ContainsKey(regionInfo.TwoLetterISORegionName))
{
countries.Add(regionInfo.TwoLetterISORegionName, regionInfo.DisplayName);
}
}
return countries.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
}
W zależności od wartości CultureTypes, liczba zwróconych krajów będzie różna od 110 do 127 (aktualnie na świecie zakłada się, że jest 195 krajów). Zaś jeżeli chodzi o tekst (wartość) to mamy do wyboru:
- DisplayName - nazwę kraju w języku z lokalizowanego .NET;
- EnglishName - nazwa kraju w języku angielskim;
- NativeName - nazwa kraju w języku danego kraju.
Dla chętnych, kluczem może być wartość ThreeLetterISORegionName, jednakże na jej podstawie nie można potem utworzyć obiektu CultureInfo czy RegionInfo.