什么是不变文化?

有人能给出一个例子来演示 不变文化的用法吗? 我不明白文档描述了什么。

89153 次浏览

一种基于行为明确的英语的虚假文化。例如,可以将内容写入配置文件,这样不管用户定义的文化如何,都可以对其进行读写。

基本上它是一个特定的培养,是人工和 不会改变

它用于无论文化如何都是相同的东西(不需要翻译成某种文化 X 才合适)

例如 https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx。当你写出一个特定于应用程序的文件,用户不应该乱搞,你应该使用 InvariantCulture 的所有方法,采取文化参数。

请注意,根据以上链接的文档:

但是,应用程序应该仅对需要独立于区域性的结果的进程使用不变区域性,例如对保存到文件中的数据进行格式化和解析。

不变文化是一种特殊的文化,它是有用的,因为它不会改变。当前区域性可以从一个用户更改为另一个用户,甚至可以从一个运行更改为另一个运行,因此不能指望它保持不变。

在几个流中,每次都能使用相同的区域性非常重要,例如序列化: 您可以在一个区域性中使用1.1值,在另一个区域性中使用1.1值。如果尝试解析第二个区域性中的“1,1”值,则解析将失败。但是,您可以使用不变区域性将数字转换为字符串,然后从任何具有任何区域性集的计算机上将其解析回来。

// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;


decimal dec = 1.1m;
string convertedToString = dec.ToString();


// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";


decimal parsedDec;


try
{
// This fails because value cannot be parsed.
parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}


// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);


// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);

不变的文化是对文化不敏感的; 它与英语有关,但与任何国家/地区无关。

CultureInfo.InvariantCulture 检索不变区域性的实例。它几乎可以用于系统中的任何方法。需要区域性的全球化命名空间。

CompareInfo、 DateTimeFormat 和 NumberFormat 等属性返回的对象也反映了不变区域性的字符串比较和格式设置约定。 当您希望以 文化独立格式显示 保存数据时,InvariantCulture 属性非常方便。

例如,如果希望以独立于应用程序当前区域性的特定格式显示数字或日期时间,可以使用 不变文化

它是一种通用的、简单的、非区域性的英语语言及其它相关信息。它就像是编程语言本身的语言。你可以依靠它来建立一个通用的日历; 在这种情况下,你需要生成控制器名称,URL 的,委托的名称... 等,并需要事情自然和普遍的行动中的所有用户。