有没有人能给出一个示例来演示使用不变性文化的用法?我不理解文档描述的内容。
不变文化是一种特殊的文化,非常有用,因为它不会更改。当前文化可以从一个用户到另一个用户甚至从一个运行到另一个运行而改变,所以您不能依赖它保持不变。
在多种情况下能够使用相同的文化非常重要,例如序列化:在一个文化中,您可能拥有值 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);
一种基于英语的虚假文化,有着明确定义的行为。非常适合写入配置文件,这样可以在用户定义的文化环境下读取和写入。
基本上它是一种特定的人工文化,不会改变。
它用于与文化无关的内容(不需要翻译成某种文化X才合适)
例如-https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx。当您编写一个特定于应用程序的文件,用户不应该干扰它时,您应该对所有需要使用文化参数的方法使用InvariantCulture。
请注意,根据上面链接的文档:
然而,应用程序只应在需要文化无关结果的进程中使用不变的文化,例如格式化和解析持久化到文件中的数据。
不变文化是一种与语言相关,但不与任何国家/地区相关的文化。
CultureInfo.InvariantCulture会检索不变文化的实例。它可以在几乎所有需要文化的System.Globalization命名空间中使用的方法中使用。
由CompareInfo、DateTimeFormat和NumberFormat等属性返回的对象还反映了不变文化的字符串比较和格式约定。当您想以与文化无关的格式显示持久数据时,InvariantCulture属性非常方便。
例如,如果您想以特定格式独立于应用程序的当前区域设置显示数字或日期时间,则可以使用CultureInfo.InvariantCulture。
这是一种通用的简单的非地区特定的英语语言及其他相关信息。它就像编程语言本身的语言。您可以在设置通用日历时依赖它,在需要生成控制器名称、URL、委托名称等情况下,需要让所有用户自然而然地使用。
System.Globalization
命名空间中的一部分,就此而言值得一提。 - Jim H.CultureInfo.InvariantCulture
可以正常工作是因为您使用相同的区域设置进行序列化...那么使用CultureInfo.CurrentCulture
不就是一样的吗? - Alisson Reinaldo SilvaCultureInfo.InvariantCulture
进行序列化,那么你知道始终可以使用CultureInfo.InvariantCulture
进行解析为十进制数。如果你使用CultureInfo.CurrentCulture
进行序列化,你的用户可能将"en-US"作为当前文化。下一个尝试将其解析为十进制数的用户可能具有使用“,”作为分隔符的当前文化。 - David Specht