在C#的System / Globalization命名空间中是否有一组常量或枚举包含有效的文化名称?
我正在寻找这样的东西,以便我不必输入“en-GB”等内容。
在C#的System / Globalization命名空间中是否有一组常量或枚举包含有效的文化名称?
我正在寻找这样的东西,以便我不必输入“en-GB”等内容。
有的,可以使用GetCultures方法:
System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures)
这将返回一个 CultureInfo
对象数组,如果你想要字符串名称,可以使用类似以下的代码:
IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
string[] names = cultures.Select(c => c.Name).ToArray();
注意 "Culture Types" 枚举(从 MSDN 链接中获取)。我想最有用的是 NeutralCultures 和 SpecificCultures。
const
/readonly
字段,也没有枚举,并且也不能防止OP硬编码“en-GB”。 - julealgon不,没有预定义的可用文化列表。可用的文化列表是特定于系统的 - 你甚至可以使用CultureAndRegionInfoBuilder注册新的自定义文化。
因此,如果您需要这个功能,您需要创建自己的枚举或常量来表示您感兴趣的常见文化子集,例如:
public static class KnownCulture
{
public readonly String EnglishUS = "en-US";
public readonly String EnglishGB = "en-GB";
... etc ...
}
或者public enum KnownLCID
{
EnglishUS = 0x409,
EnglishGB = 0x809,
...
}
这就像KnownColor
枚举一样:不可能为所有可能的颜色创建一个枚举,但是为经常使用的颜色创建一个枚举可能是有意义的。
我不会期望微软提供一个默认的等效 KnownCulture
枚举,因为它相当敏感(为什么我的文化不被包括在内?)。