为了账号安全,请及时绑定邮箱和手机立即绑定

CultureInfo.InvariantCulture是什么意思?

CultureInfo.InvariantCulture是什么意思?

慕姐4208626 2019-11-08 14:34:59
我有一串这样的文字: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);这是什么意思,它将影响我的程序的运行方式吗?
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

当数字,日期和时间格式化为字符串或从字符串中解析时,将使用区域性来确定其完成方式。例如,在主流en-US文化中,您具有以下字符串表示形式:

  • 1,000,000.00-一百万,两位小数

  • 1/29/2013-发布日期

在我的文化(da-DK)中,值具有以下字符串表示形式:

  • 1.000.000,00-一百万,两位小数

  • 2013年1月29日-发布日期

在Windows操作系统中,用户甚至可以自定义数字和日期/时间的格式,还可以选择操作系统以外的其他区域。所使用的格式是用户的选择方式,应该是这样。

所以,当你格式化值使用被显示给用户,例如ToStringString.Format或使用从字符串解析DateTime.ParseDecimal.Parse默认是使用CultureInfo.CurrentCulture。这允许用户控制格式。

但是,许多字符串格式设置和解析实际上不是应用程序和用户之间交换的字符串,而是应用程序和某些数据格式(例如XML或CSV文件)之间交换的字符串。在那种情况下,您不想使用,CultureInfo.CurrentCulture因为如果格式化和解析是使用不同的区域性进行的,则它可能会中断。在这种情况下,您要使用CultureInfo.InvariantCulture(基于en-US区域性)。这样可以确保值可以无问题地往返。

该ReSharper的给你警告的原因是,一些应用程序编写者不知道这种区别可能导致意想不到的结果,但他们从来没有发现这一点,因为他们CultureInfo.CurrentCulture就是en-US具有相同行为CultureInfo.InvariantCulture。但是,一旦在另一种区域性中使用了该应用程序,就有机会使用一种区域性进行格式化而另一种区域性用于解析该应用程序。

总结一下:

  • CultureInfo.CurrentCulture如果要格式化或解析用户字符串,请使用(默认)。

  • 使用CultureInfo.InvariantCulture如果格式化或解析应该由一个软件是解析的字符串。

  • 由于用户无法控制格式化和解析的方式,因此很少使用特定的国家文化。


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 824 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信