来自.NET的GetCountries没有交付所有国家/地区?

时间:2016-03-09 15:05:10

标签: asp.net .net globalization

当我使用下面的代码(过去工作正常)时,我现在可以使用.NET 4.6获得一个不包含纳米比亚的列表,并且在过滤之前包含Yabuuti大约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 个答案:

答案 0 :(得分:6)

RegionInfo会返回有关文化的信息,而非国家/地区。没有内置的方法来返回国家(因为他们有能力不经常改变)

答案 1 :(得分:0)

许多RegionInfo与多个CultureInfo相关联。请参阅示例https://ideone.com/yTfO8A。例如 India 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);
    }
}