什么是不变文化?
有人可以举一个例子来展示不变文化的用法吗? 我不明白什么文件描述。
不变文化是一种特殊的文化,因为它不会改变,所以它是有用的。 当前的文化可以从一个用户变为另一个用户,甚至从一个用户变为另一个用户,所以你不能依靠保持不变。
每次能够使用相同的文化在几个stream程中是非常重要的,例如序列化:在一个文化中可以有1,1个值,在另一个文化中可以有1.1个值。 如果你将尝试parsing第二种文化中的“1,1”值,那么parsing将失败。 但是,您可以使用不变文化将数字转换为string,然后使用任何区域性设置将其parsing回来。
// 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);
基于英语的假文化,具有明确的行为。 很好,例如,写入configuration文件的东西,所以它可以被读取和写入,而不pipe用户已经定义的文化。
基本上这是一个特定的文化,是人为的, 不会改变 。
它被用于不pipe文化是相同的东西(这不需要被翻译成某种文化X是适当的)
至于示例 – https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx 。 当你写出一个应用程序特定的文件,用户不应该搞乱,你应该使用InvariantCulture所有方法文化参数。
请注意,根据上面链接的文档:
但是,应用程序应该只将不变文化用于需要独立于文化的结果的进程,例如格式化和parsing持久化到文件的数据。
不变的文化是文化不敏感的; 它与英语相关,但不与任何国家/地区相关联。您可以使用不变的文化进行文化敏感的string操作,这些string操作不受当前线索文化约定的影响,且跨文化一致。
CultureInfo.InvariantCulture检索不变文化的一个实例。 它可以在几乎任何需要文化的System.Globalization命名空间中使用。 诸如CompareInfo,DateTimeFormat和NumberFormat等属性返回的对象也反映了不变文化的string比较和格式约定。
不同于对文化敏感的数据(用户自定义或通过更新.NET Framework或操作系统)可能会有所变化,不变的文化数据在一段时间内是稳定的,在所安装的文化中是稳定的,不能由用户自定义。 这使得不变文化特别适用于需要独立于文化的结果的操作,例如格式化和parsing操作(持久化格式化的数据),或sorting和sorting操作(需要数据以固定顺序显示而不pipe文化)。
InvariantCulture属性在您希望以独立于文化的格式显示持久数据时非常方便。
例如,如果您想以独立于应用程序当前文化的特定格式显示数字或date时间,则可以使用CultureInfo.InvariantCulture 。