在vb.net应用程序中,我有一个组合框,我想填写世界上所有国家。
我用这段代码填充组合框:
For each ci In CultureInfo.GetCultures(CultureTypes.AllCultures)
Dim ri as RegionInfo
'Avoid null exception
Try
ri = New RegionInfo(ci.LCID)
Catch
Continue For
End Try
ri = New RegionInfo(ci.LCID)
Me.ComboBoxCountries.Add(ri.ThreeLetterISORegionName + " - " + ri.EnglishName + " / " + ri.NativeName)
Next
所以基本上,目标是在我的列表中有:
ESP - 西班牙/西班牙
但是,由于西班牙有多种文化/语言(加泰罗尼亚语,卡斯蒂利亚语,巴斯克语,加利西亚语等),我有:
ESP - 西班牙/ Espainia
ESP - 西班牙/西班牙(这是卡斯蒂利亚人)
ESP - 西班牙/ Espanya (这是加泰罗尼亚语)
等
所以,由于似乎没有优先权,我想知道如何只用这个国家的第一语言来获得国家和它的名字。
基本上,我觉得从世界上所有文化开始获取国家列表很奇怪。
答案 0 :(得分:0)
首先,不要使用AllCultures
而是使用SpecificCultures
,然后您不需要处理异常。这个LINQ查询应该有效:
Dim countries = From ci In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
Let ri = New RegionInfo(ci.Name)
Let engCountry = ri.EnglishName
Group ri By engCountry Into CountryGroup = Group
Let first = CountryGroup.First()
Order By first.ThreeLetterISORegionName
Select String.Format("{0} - {1} / {2}",
first.ThreeLetterISORegionName,
first.EnglishName,
first.NativeName)
Dim countryList As List(Of String) = countries.ToList()