繁体   English   中英

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

[英]random values using CultureInfo object in C#

我一直在审查以下链接

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

但是我仍然不明白如何使用CultureInfo类(例如“ en”或“ fr” ....等)随机检索有效的2个字母的文化值。

请帮忙。

谢谢

(我不确定您为什么要这么做,但是...)您可以使用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];

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


编辑:如果您的目标只是创建给定两个字母代码(例如“ en”或“ fr”)的CultureInfo ,则可以执行以下操作:

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);

获得英语的能力比德语有更大的变化(英语文化比德语多)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM