c#的CultureInfo.GetCultures返回一个空列表

本文关键字:一个 列表 CultureInfo GetCultures 返回 | 更新日期: 2023-09-27 18:04:25

我不能使用GetCultures,从我可以看出它返回一个空白列表。

private void AddressChooser_Load(object sender, EventArgs e)
    {
        MessageBox.Show("Form load event successfully triggered") //Debug message - This appears at runtime
        foreach (string country in GetCountryList())
        {
            MessageBox.Show(country); //Debug message - This does not appear at runtime!!
            countryBox.Items.Clear();
            countryBox.Items.Add(country);
        }
    }
    public static List<string> GetCountryList()
    {
        MessageBox.Show("Function has been triggered successfully"); //Debug message - This appears at runtime
        List<string> cultureList = new List<string>();
        CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
        foreach (CultureInfo culture in cultures)
        {
            RegionInfo region = new RegionInfo(culture.LCID);
            if (!(cultureList.Contains(region.EnglishName)))
                cultureList.Add(region.EnglishName);
            MessageBox.Show(region.EnglishName); //Debug message - This does not appear at runtime!
        }
        return cultureList;
    }

我觉得很奇怪,考虑到它只是一个复制粘贴的片段,这不起作用。请帮助!由于

c#的CultureInfo.GetCultures返回一个空列表

您一定是在地板垫下面的某个地方扫除了一个异常。

你的代码失败了,因为CultureTypes.AllCultures & ~CultureTypes.NeutralCultures不工作。您的列表包含中性培养物和new RegionInfo()抛出。

代码片段:

var c1 = CultureTypes.AllCultures & ~CultureTypes.NeutralCultures;
Console.WriteLine(c1);

产生SpecificCultures, InstalledWin32Cultures,我想那些Win32培养包含中性的。

简单的解是CultureInfo.GetCultures(CultureTypes.SpecificCultures);

但是需要修复的主要问题是你的Exception处理和调试技术。

首先,调试>>异常并将CLR运行时异常设置为抛出是个好主意。其次,我认为这段代码可以是你正在寻找的:

        static void Main()
        {
            List<string> cultureList = new List<string>();
            CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
            foreach (CultureInfo culture in cultures)
            {   
                try
                {
                    RegionInfo region = new RegionInfo(culture.Name);
                    if (!(cultureList.Contains(region.EnglishName)))
                        cultureList.Add(region.EnglishName);
                    Console.WriteLine(region.EnglishName); 
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(String.Format("For{0} a specific culture name is required.", culture.Name));
                }                  
            }
        }

使用按位的代替这里的CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);