使用c#中的相应两个字母和三个字母代码填充国家/地区列表

时间:2013-07-30 12:50:48

标签: c# list culture

任何人都可以帮助填写国家/地区名称列表,相应的两个字母代码和三个字母代码..我尝试了下面的代码片段,但它给了我不完整的结果。

 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();
    }
}

2 个答案:

答案 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指向西班牙的RegionInfoca-ES(加泰罗尼亚语),eu-ES(巴斯克语),gl-ES(加利西亚语)和es-ES(西班牙语)。这是因为CultureInfo主要关注语言,语言和区域不需要匹配。

世界上有超过127个国家。问题是,使用CultureInfoRegionInfo接近此问题只能告诉您计算机碰巧知道的国家/地区,这不太可能是完整列表。更重要的是,正如RegionInfo所暗示的那样,它们甚至不一定是国家或国家。例如,我的计算机上的RegionInfo个条目之一是“Caribbean”,其中TwoLetterISORegionName为029(我必须承认它是相当奇怪的)。加勒比地区显然不是一个国家。

解决问题的更好方法是在其他地方查找国家/地区列表,例如here,并将它们存储在程序中的某个表格中。

答案 1 :(得分:0)

我刚刚看到这个链接:http://ucodia.fr/2011/09/csharp-get-list-windows-countries/有助于获取完整列表。这会是一个更好的主意。?

Rithesh