什么是不变文化?

Ric*_*cky 165 .net globalization

有谁可以举例说明Invariant Culture的用法?我不明白文档描述的内容.

And*_*zub 123

不变文化是一种特殊的文化,它是有用的,因为它不会改变.当前的文化可以从一个用户变为另一个用户,甚至从一个用户变为另一个用户,因此您不能依赖它保持不变.

能够每次使用相同的文化在几个流程中非常重要,例如,序列化:您可以在一种文化中具有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);
Run Code Online (Sandbox Code Playgroud)

  • 对于它的价值,这是在`System.Globalization`命名空间中. (9认同)
  • @Alisson如果将安德鲁的最后两个代码语句放回原始流程中,我认为这会更有意义。如果您始终使用`CultureInfo.InvariantCulture`进行序列化,那么您将始终可以使用`CultureInfo.InvariantCulture`解析为十进制。如果您使用`CultureInfo.CurrentCulture`进行序列化,则您的用户当前的文化可能是“ en-US”。下一个将其解析回十进制的用户可能具有当前使用“,”作为分隔符的区域性。 (3认同)
  • @安德鲁也许我很笨,但如果没有大卫的评论,我无法理解你在说什么。我将您的答案编辑为明确的。 (2认同)

小智 108

基于英语和定义行为的虚假文化.很高兴将内容写入配置文件,以便无论用户定义的文化如何都可以读取和写入.

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

  • 添加史蒂夫的评论:当你实际上并不关心事物看起来如何*时,它是使用的文化(你不关心它是否使用逗号或点或其他什么,因为用户永远不会看到它)但你确实需要它总是一样的(例如,因为你需要能够阅读你所写的内容). (22认同)
  • Yesss ......典型的问题:*美国程序员认为这个词是英语;)然后德国客户写1000.000,00;)哎哟.*即使使用相同的语言,例如瑞士和德国也使用"." 和","以不同的方式在数字上.结果 - >配置文件是垃圾.在那里使用不变语言;) (8认同)
  • 具体来说,您不会被字母形式的数字或奇数情况转换中的逗号和点的不同用法所捕获. (4认同)

Gis*_*shu 7

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

例如 - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx.当您编写用户不应该使用的特定于应用程序的文件时,您应该将InvariantCulture用于接受culture参数的所有方法.

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

但是,应用程序应仅对需要与文化无关的结果的进程使用不变文化,例如格式化和解析持久保存到文件的数据.

  • 这说明了Invariant Culture只是一种中间格式的推论,即如果你向用户展示的是不变文化的输出(即"在'不变文化中),你就是在做有些不对劲,不懂不变的文化. (3认同)