我有一个这样的文本字符串:
var foo = "FooBar";我想声明第二个名为bar的字符串,并使其等于第一个foo的第一个和第四个字符,所以我这样做:
var bar = foo[0].ToString() + foo[3].ToString();这和预期的一样,但是ReSharper建议我把Culture.InvariantCulture放在括号里,所以这一行是这样结束的:
var bar = foo[0].ToString(CultureInfo.InvariantCulture)
+ foo[3].ToString(CultureInfo.InvariantCulture);这意味着什么,它会影响我的程序的运行方式吗?
发布于 2012-03-19 01:10:30
并非所有区域性都使用相同的日期和小数/货币值格式。
当您将作为字符串存储的输入值(读取)转换为DateTime、float、double或decimal时,这将非常重要。如果您尝试将上述数据类型格式化为字符串(写入)以进行显示或存储,这也很重要。
如果您提前知道日期和小数/货币值所在的特定区域性,则可以使用该特定CultureInfo属性(即CultureInfo("en-GB"))。例如,如果您期望用户输入。
如果您正在格式化或分析一个字符串,而该字符串应可由独立于用户本地设置的软件进行分析,则可以使用CultureInfo.InvariantCulture 属性。
缺省值为CultureInfo.InstalledUICulture,因此缺省的CultureInfo取决于正在执行的操作系统的设置。这就是为什么你应该始终确保文化信息符合你的意图(请参阅以获得良好的指导方针)。
发布于 2013-01-20 04:41:09
当数字、日期和时间被格式化为字符串或从字符串中解析时,将使用区域性来确定它是如何完成的。例如,在占主导地位的en-US文化中,您可以使用以下字符串表示:
带有两位数fraction
在我的区域性(da-DK)中,值具有以下字符串表示形式:
带有两位数fraction
在Windows操作系统中,用户甚至可以定制数字和日期/时间的格式,也可以选择与其操作系统的文化不同的文化。所使用的格式是用户的选择,它应该是这样的。
因此,当您使用例如ToString或String.Format格式化要显示给用户的值,或者使用DateTime.Parse或Decimal.Parse从字符串解析时,缺省设置是使用CultureInfo.CurrentCulture。这允许用户控制格式。
然而,许多字符串格式化和解析实际上不是应用程序和用户之间的字符串交换,而是应用程序和某些数据格式(例如XML或CSV文件)之间的交换。在这种情况下,您不希望使用CultureInfo.CurrentCulture,因为如果使用不同的区域性进行格式化和解析,则可能会中断。在这种情况下,您需要使用CultureInfo.InvariantCulture (它基于en-US区域性)。这确保了值可以往返,而不会出现问题。
ReSharper给出警告的原因是,一些应用程序编写人员没有意识到这一区别,这可能会导致意外的结果,但他们永远不会发现这一点,因为他们的CultureInfo.CurrentCulture是en-US,其行为与CultureInfo.InvariantCulture相同。但是,一旦应用程序在另一个区域性中使用,其中有可能使用一个区域性进行格式化,而另一个区域性用于解析,则应用程序可能会崩溃。
所以总结一下:
如果您正在格式化或分析用户字符串,则
CultureInfo.CurrentCulture (默认值)。如果您正在格式化或分析应可由一段software.CultureInfo.InvariantCulture。由于用户无法控制如何进行格式化和分析,因此请使用特定的国家区域性。发布于 2014-05-22 16:27:24
根据微软的说法:
CultureInfo.InvariantCulture属性既不是非特定区域性,也不是特定区域性。它是第三种对文化不敏感的文化。它与英语相关,但与国家或地区无关。
(来自http://msdn.microsoft.com/en-us/library/4c5zdc6a(vs.71).aspx
因此,InvariantCulture类似于"en-US“文化,但并不完全相同。如果你这样写:
var d = DateTime.Now;
var s1 = d.ToString(CultureInfo.InvariantCulture); // "05/21/2014 22:09:28"
var s2 = d.ToString(new CultureInfo("en-US")); // "5/21/2014 10:09:28 PM"然后,s1和s2将具有类似的格式,但InvariantCulture添加前导零,"en-US“使用AM或PM
因此,当您将日期保存到文本文件或解析数据时,InvariantCulture更适合内部使用。当您呈现数据(日期、货币...)时,指定的CultureInfo更好。给最终用户。
https://stackoverflow.com/questions/9760237
复制相似问题