使用C#中的CultureInfo对象的随机值

本文关键字:随机 对象 CultureInfo 中的 使用 | 更新日期: 2024-09-19 12:24:27

我一直在查看以下链接

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx

但我仍然不明白如何使用CultureInfo类(如"en"或"fr")随机检索有效的2个字母的区域性值。。。。等

请帮忙。

感谢

使用C#中的CultureInfo对象的随机值

(我不确定你为什么想要这样,但是…)你可以使用CultureInfo.GetCultures获得随机区域性,然后从结果中随机选择:

var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
var random = new Random();
int index = random.Next(0, allCultures.Length);
var culture = allCultures[index];
string twoLetterCode = culture.TwoLetterISOLanguageName;

请注意,这并没有考虑到没有偶数个区域性具有相同的2个字母代码。这将在所有文化中随机选择,但不是均匀地通过2个字母的代码。如果你想在那里进行更随机的分布,你可以使用:

var uniqueCultureCodes = CultureInfo.GetCultures(CultureTypes.AllCultures)
                      .Select(c => c.TwoLetterISOLanguageName)
                      .Distinct()
                      .ToList();
var random = new Random();
int index = random.Next(0, uniqueCultureCodes.Count);
string twoLetterCode = uniqueCultureCodes[index];

这将创建两个字母代码的不同列表,然后从中随机选择。


编辑:如果你的目标只是创建一个CultureInfo,给定两个字母的代码,如"en"或"fr",你可以这样做:

CultureInfo culture = new CultureInfo("en");

但我仍然不明白如何使用CultureInfo类(如"en"或"fr")随机创建一个有效的2个字母的区域性值。。。。等

你是说你想获得一种随意的文化?只需获取所有有效的区域性,并从该集合中提取一个随机元素。(您可以使用System.Random,但要注意需要处理的各种问题。)

编辑:请注意,如果只想从已知的缩写中获取一个区域性,我建议使用CultureInfo.GetCultureInfo而不是CultureInfo构造函数。这允许缓存,也为您提供了一个只读的文化,这几乎可以肯定是您想要的。(对只读数据进行推理更容易…)

如果您不关心区域(<language>-<region>的最后一部分),则需要使用:

CultureInfo[] languages = CultureInfo.GetCultures(CultureTypes.NeutralCultures);

检索不同的语言。如果您使用:

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

学习英语比学习德语有更大的变化(英语文化比德语多)。