.net 什么是不变文化?

.net 什么是不变文化?,.net,globalization,.net,Globalization,有谁能举个例子来说明这个词的用法吗?我不明白文档中描述的是什么。一种基于英语的、行为明确的虚假文化。例如,很适合写入配置文件,这样无论用户定义的文化如何,都可以读取和写入配置文件 基本上,它是一种特定的人工文化,不会改变它用于无论何种文化都相同的东西(不需要翻译成某种文化X才合适) 例如-。当您编写一个用户不应该乱搞的特定于应用程序的文件时,您应该对所有采用区域性参数的方法使用不变量区域性 请注意,根据上面链接的文档: 但是,应用程序应仅对需要区域性独立结果的进程使用不变区域性,例如格式化和解析

有谁能举个例子来说明这个词的用法吗?我不明白文档中描述的是什么。

一种基于英语的、行为明确的虚假文化。例如,很适合写入配置文件,这样无论用户定义的文化如何,都可以读取和写入配置文件


基本上,它是一种特定的人工文化,不会改变

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

例如-。当您编写一个用户不应该乱搞的特定于应用程序的文件时,您应该对所有采用区域性参数的方法使用不变量区域性

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

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


不变区域性是一种特殊的区域性,它很有用,因为它不会改变。当前的文化可以从一个用户到另一个用户,甚至从一次跑步到另一次跑步,所以你不能指望它保持不变

在一些流中,每次都能使用相同的区域性非常重要,例如序列化:一个区域性中可以有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检索不变区域性的实例。它几乎可以用于System.Globalization命名空间中需要区域性的任何方法

属性(如CompareInfo、DateTimeFormat和NumberFormat)返回的对象也反映了不变区域性的字符串比较和格式约定。 当您希望以与区域性无关的格式显示持久化数据时,不变量区域性属性非常方便


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

这是一种通用的、简单的、非区域特定的英语和其他相关信息。它就像编程语言本身的语言。你可以依靠它来建立一个万年历;在需要生成控制器名称、URL、代理名称等的情况下。它是英文的,但与任何位置都没有关联。具体来说,你不会被逗号和数字字符串形式中的点的不同用法或奇数大小写转换所吸引。是的。。。典型问题:*认为这个词是英语的美国程序员;)然后德国客户以1000美元兑换1.000,00美元;)哎哟.*例如,即使在同一种语言中,瑞士和德国在数字中也以不同的方式使用“.”和“.”。结果->配置文件是垃圾。在那里使用固定语言;)在Steve的评论中补充一点:这是一种文化,当你实际上不关心事物的外观时(你不关心它是否使用逗号或点或其他,因为用户永远看不到它),但你确实需要它始终保持不变(例如,因为你需要能够阅读你所写的内容)。为了它的价值,这是在
System.Globalization
命名空间中。这将始终有效,因为您使用相同的区域性@Alisson进行序列化。如果您将Andrew的最后两个代码语句放回原始流中,我认为这将更有意义。如果您总是使用
CultureInfo.InvariantCulture
进行序列化,那么您就知道您总是能够使用
CultureInfo.InvariantCulture
解析回十进制。如果您使用
CultureInfo.CurrentCulture
进行序列化,您的用户可能将“en US”作为其当前区域性。下一个将其解析回十进制的用户可能有一个当前区域性,该区域性使用“,”作为分隔符。@Andrew也许我很笨,但如果没有David的评论,我无法理解你在说什么。我将您的答案编辑为明确的。这说明了一个推论,即不变区域性只是一种中间格式,也就是说,如果您向用户显示的内容是不变区域性的输出(即“在”不变区域性中),那么您正在做一些错误的事情,并且不理解不变区域性。