任何人都可以帮助填写国家/地区名称列表,相应的两个字母代码和三个字母代码..我尝试了下面的代码片段,但它给了我不完整的结果。
static void Main(string[] args)
{
List<string> list = new List<string>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))
{
try
{
RegionInfo myRI1 = new RegionInfo(ci.LCID);
list.Add(String.Format("{0,-12}{1,-12}{2}", myRI1.TwoLetterISORegionName, myRI1.EnglishName, myRI1.ThreeLetterISORegionName));
}
catch { }
}
list.Sort(); // sort by name
// write to console
foreach (string str in list)
Console.WriteLine(str);
Console.WriteLine("Total Countries" + list.Count.ToString());
Console.ReadKey();
}
}
答案 0 :(得分:2)
如果你真的必须使用C#检索这些信息,我就是这样做的:
var regions = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Where(c => !c.IsNeutralCulture && c.LCID != 0x7f)
.Select(c => new RegionInfo(c.LCID))
.GroupBy(r => r.TwoLetterISORegionName) // This is an alternative to using Distinct
.Select(g => g.First()) // It's probably not very efficient, but the list is so small anyway.
.OrderBy(r => r.TwoLetterISORegionName)
.ToList();
(LCID 0x7f的文化是InvariantCulture
,它没有关联的RegionInfo。)
这只能在我的电脑上提供127个国家/地区。您的方法会提供更多结果,因为有多个CultureInfos
的实例共享相同的RegionInfo
。例如,有四种不同的CultureInfos
指向西班牙的RegionInfo
:ca-ES
(加泰罗尼亚语),eu-ES
(巴斯克语),gl-ES
(加利西亚语)和es-ES
(西班牙语)。这是因为CultureInfo
主要关注语言,语言和区域不需要匹配。
世界上有超过127个国家。问题是,使用CultureInfo
和RegionInfo
接近此问题只能告诉您计算机碰巧知道的国家/地区,这不太可能是完整列表。更重要的是,正如RegionInfo
所暗示的那样,它们甚至不一定是国家或国家。例如,我的计算机上的RegionInfo
个条目之一是“Caribbean”,其中TwoLetterISORegionName为029
(我必须承认它是相当奇怪的)。加勒比地区显然不是一个国家。
解决问题的更好方法是在其他地方查找国家/地区列表,例如here,并将它们存储在程序中的某个表格中。
答案 1 :(得分:0)
我刚刚看到这个链接:http://ucodia.fr/2011/09/csharp-get-list-windows-countries/有助于获取完整列表。这会是一个更好的主意。?
Rithesh