从.NET获取国家信息时未提供所有国家?

4
当我使用以下代码(之前可以正常运行)时,在.NET 4.6中,我现在得到了一个不包括纳米比亚并且包括了约50次阿尔及利亚的名单。有什么想法为什么会这样或者是什么发生了变化?
    private void SetCountriesComboBox()
    {
        RegionInfo country = new RegionInfo(new CultureInfo("en-US", false).LCID);
        List countryNames = new List();
        foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
        {
            country = new RegionInfo(new CultureInfo(cul.Name, false).LCID);
            countryNames.Add(country.DisplayName.ToString());
        }
        IEnumerable nameAdded = countryNames.OrderBy(names => names).Distinct();
        foreach (string item in nameAdded)
        {
            comboBox1.Items.Add(item);
        }
    }
2个回答

6

RegionInfo 返回与文化相关的信息,而不是国家。没有内建的方法可以返回国家(因为它们的能力会很少改变)。


感谢..是的...我一直在使用它来生成国家列表,正如其他几篇帖子所记录的一样。我错误地假设.NET也打算将其用于此用途,因为正如您指出的那样,没有直接获取国家列表的方法...列表的更改速度比人们想象的要快... - GGleGrand

0

许多RegionInfo与多个CultureInfo相关联。例如请参见https://ideone.com/yTfO8A。例如,印度的RegionInfo有大约14个CultureInfo。瑞士的RegionInfo有4个CultureInfo

请注意,您的代码是冗余的:您重建了new CultureInfo(cul.Name, false).LCID。更合理的做法是类似以下的方式:

private static void SetCountriesComboBox()
{
    List<string> countryNames = new List<string>();

    foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
    {
        RegionInfo country = new RegionInfo(cul.LCID);
        countryNames.Add(string.Format("{0} ({1})", country.DisplayName, cul.DisplayName));
        // countryNames.Add(country.DisplayName);
    }

    IEnumerable<string> nameAdded = countryNames.OrderBy(names => names).Distinct();

    foreach (string item in nameAdded)
    {
        comboBox1.Items.Add(item);
    }
}

谢谢,是的...仍然没有产生期望的结果。 - GGleGrand
1
整个代码可以写成一行:comboBox1.Items.Add(CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(c => (new RegionInfo(c.LCID)).DisplayName).Distinct().OrderBy(c=>c)); - Rik
1
@Rik 您需要使用 AddRange... 但是 AddRange 需要一个数组,因此需要使用 OrderBy(...).ToArray() - xanatos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接