Как сделать выпадающий список всех культур (но без повторов) - PullRequest
11 голосов
/ 11 мая 2011

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

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

После выбора из верхнего списка в нижнем списке будут отображаться любые конкретные типы.

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

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

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

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

Есть ли лучший способ для этого?

Спасибо

1 Ответ

17 голосов
/ 11 мая 2011

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

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

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

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

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