有人可以举一个例子来说明不变文化的用法吗?我不了解文档描述的内容。
Answers:
不变文化是一种特殊的文化,因为它不会改变,因此很有用。当前的文化可以从一个用户更改为另一个用户,甚至可以从一个运行更改为另一个,因此您不能依靠它保持不变。
每次使用相同文化的能力在多个流程中非常重要,例如序列化:在一个文化中可以有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);
System.Globalization
名称空间中。
CultureInfo.InvariantCulture
作品是因为您使用了相同的文化序列化...。那么这与使用作品不同CultureInfo.CurrentCulture
吗?
CultureInfo.InvariantCulture
进行序列化,那么您将始终可以使用解析回十进制CultureInfo.InvariantCulture
。如果您用于CultureInfo.CurrentCulture
序列化,则用户当前的文化可能是“ en-US”。下一个将其解析为十进制的用户可能具有当前使用“,”作为分隔符的区域性。
一种基于英语的假文化,具有明确的行为。例如,将内容填充到配置文件中非常好,因此无论用户定义的区域性如何,都可以对其进行读写。
基本上,这是一种人造的特定文化,不会改变。
无论什么文化,它都用于相同的东西(不需要翻译成适当的X文化)
例如-https://msdn.microsoft.com/zh-cn/library/4c5zdc6a(v=vs.100).aspx。当写出用户不应该与之混为一谈的特定于应用程序的文件时,应该对所有采用区域性参数的方法都使用InvariantCulture。
请注意,根据上面链接的文档:
但是,应用程序应仅将不变性区域性用于要求与区域性无关的结果的过程,例如格式化和解析持久化到文件的数据。
不变文化对文化不敏感;它与英语相关,但与任何国家/地区无关。
CultureInfo.InvariantCulture检索不变区域性的实例。几乎可以在需要文化的System.Globalization命名空间中的任何方法中使用它。
由诸如CompareInfo,DateTimeFormat和NumberFormat之类的属性返回的对象还反映了不变区域性的字符串比较和格式约定。当您要以与区域性无关的格式显示持久数据时,InvariantCulture属性将很方便。
例如,如果要以特定格式显示数字或日期时间,而不依赖于应用程序的当前区域性,则可以使用CultureInfo.InvariantCulture。
它是一种通用的,非区域特定的通用英语语言和其他相关信息。就像编程语言本身的语言一样。您可以依靠它来设置通用日历;在需要生成控制器名称,URL,代表名称等的情况下。并且需要让所有用户自然而普遍地采取行动。