C # CultureInfo.GetCultures возвращает пустой список - PullRequest
0 голосов
/ 03 августа 2011

Я не могу использовать 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;
    }

Мне кажется странным, что это не работает, учитывая, что это просто скопированный фрагмент кода. Пожалуйста помоги! Спасибо

Ответы [ 3 ]

5 голосов
/ 03 августа 2011

Вы, должно быть, где-то подметаете Исключение под ковриком.

Ваш код не работает, потому что CultureTypes.AllCultures & ~CultureTypes.NeutralCultures не работает.Ваш список содержит нейтральные культуры и new RegionInfo() бросков.

Фрагмент:

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

производит SpecificCultures, InstalledWin32Cultures, и я полагаю, что эти культуры Win32 содержат нейтральные.

Простым решением будет CultureInfo.GetCultures(CultureTypes.SpecificCultures);

Но главное, что нужно исправить, - это ваши методы обработки и отладки исключений.

2 голосов
/ 03 августа 2011

Во-первых, рекомендуется отладить >> исключения и установить для исключений времени выполнения CLR значение Thrown.Во-вторых, я думаю, что этот код может быть тем, что вы ищете:

        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));
                }                  
            }
        }
0 голосов
/ 03 августа 2011

Используйте побитовые или вместо и здесь CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);

...