如何制作所有文化的下拉列表(但没有重复)

aro*_*ron 11 c# asp.net globalization cultureinfo

我正在尝试制作2个下拉列表.

最上面的一个提供所有文化,(但没有重复).示例:英语,西班牙语,菲律宾语

从顶部列表中选择后,底部列表将显示任何特定类型.

我现在用这个代码作为我的顶级名单.

foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
Run Code Online (Sandbox Code Playgroud)

然而,它并不显示菲律宾语(菲律宾) 我宁可不使用GetCultures(CultureTypes.AllCultures)),因为它显示了太多的一次.

看起来我可能需要将NeutralCultures加载到IList中.然后遍历AllCultures以确保它的ThreeLetterISOLanguageName在列表中,如果不添加它.

有一个最好的做法吗?

谢谢

Jef*_*ado 17

查看不同CultureTypes值的参考.它告诉你每个包含的内容.

我想你想要除了特定文化之外的所有东西?您可以将所有非特定文化组合成一组或获取所有文化并排除特定文化.第二种方法最容易在LINQ中表达:

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
                          .Except(CultureInfo.GetCultures(CultureTypes.SpecificCultures));
Run Code Online (Sandbox Code Playgroud)

虽然似乎既然CultureTypes有flags属性,我们也可以SpecificCultures在获取它们时屏蔽它们.

var cultures = CultureInfo.GetCultures(
    CultureTypes.AllCultures & ~CultureTypes.SpecificCultures
);
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 GetCultures(CultureTypes.AllCultures & ~CultureTypes.SpecificCultures) 代替两次调用 GetCultures 并使用 Except (2认同)