Как создать раскрывающийся список всех культур (но не повторений)

Я пытаюсь сделать 2 раскрывающихся списка.

В верхней части представлены все культуры (но нет повторов). Пример: английский, испанский, филиппинский

После выбора из верхнего списка нижний список отобразит любые конкретные типы.

Я сейчас использую этот код для своего верхнего списка.

foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.NeutralCultures))

Однако он не показывает филиппинский (Филиппины) Я бы предпочел не использовать GetCultures (CultureTypes.AllCultures)), потому что он показывает слишком много сразу.

Кажется, мне может понадобиться загрузить NeutralCultures в IList. Затем перейдите через AllCultures, чтобы убедиться, что в списке указано значение ThreeLetterISOLanguageName, если не добавить его.

Есть ли наилучшая практика для этого?

Спасибо

Ответ 1

Посмотрите на ссылку для различных значений CultureTypes. Он сообщает вам, что включено для каждого.

Я думаю, вы хотите все, что угодно, кроме специфических культур? Вы можете объединить все неспецифические культуры в набор или получить все культуры и исключить конкретные. Второй подход легче всего выразить в LINQ:

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
                          .Except(CultureInfo.GetCultures(CultureTypes.SpecificCultures));

Хотя кажется, что поскольку CultureTypes имеет атрибут flags, мы также могли бы просто маскировать SpecificCultures при их получении.

var cultures = CultureInfo.GetCultures(
    CultureTypes.AllCultures & ~CultureTypes.SpecificCultures
);