什么是不变文化?

时间:2010-03-11 07:58:27

标签: .net globalization

有人举例说明Invariant Culture的用法吗?我不明白文档描述的内容。

5 个答案:

答案 0 :(得分:118)

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

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

答案 1 :(得分:102)

基于具有已定义行为的英语的虚假文化。非常好,例如,将东西写入配置文件,这样无论用户定义的文化如何,都可以读取和写入。

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

答案 2 :(得分:6)

它用于不管文化相同的东西(不需要翻译成某种文化X是合适的)

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

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

  

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

答案 3 :(得分:3)

不变文化对文化不敏感;它与英语相关联,但与任何国家/地区无关。您可以将不变文化用于不受当前线程文化约定影响且文化一致的文化敏感字符串操作。

  

CultureInfo.InvariantCulture检索的实例   不变的文化。它几乎可以在任何方法中使用   需要文化的System.Globalization命名空间。对象   由CompareInfo,DateTimeFormat等属性返回   NumberFormat还反映了字符串比较和格式   不变文化的惯例。

     

与文化敏感数据不同,后者可能会被用户更改   自定义或通过.NET Framework或操作的更新   系统,不变文化数据随着时间的推移而稳定   已安装的文化,无法由用户自定义。这使得   不变文化对于需要的操作特别有用   与文化无关的结果,例如格式化和解析操作   持久化格式化数据,或排序和排序操作   要求数据按固定顺序显示,无论文化如何。

当您希望以与文化无关的格式显示持久数据时,InvariantCulture属性非常方便。

例如,如果您想以特定格式显示数字或日期时间,而不依赖于应用程序的当前文化,您可以使用CultureInfo.InvariantCulture

答案 4 :(得分:0)

这是一种通用的,非区域特定的简单英语语言和其他相关信息。就像编程语言本身的语言一样。您可以依靠它来设置通用日历;在需要生成控制器名称,URL,代表名称等的情况下。并且需要让所有用户自然而普遍地采取行动。