为什么ReSharper在未明确指定CultureInfo时会在Char.ToString()处发出警告?

时间:2016-01-11 08:34:14

标签: c# resharper cultureinfo

我想知道为什么ReSharper会警告我,当我尝试将字符串转换为字符串而不提供特定的文化信息时。

是否存在可以在两个系统上进行不同转换的情况?

示例:

var str = ' '.ToString();

默认情况下会弹出以下ReSharper警告:

  

明确指定字符串转换中的文化。

2 个答案:

答案 0 :(得分:10)

这是因为ReSharper看到该类型实现了IConvertible ToString(IFormatProvider)

System.Char本身不会公开带有该签名的公共方法,即使documentation指示它也是如此:

Char.ToString overloads

如果您使用IFormatProvider参数查看重载,您会看到此通知:

  

实现
  IConvertible.ToString(IFormatProvider)

和这句话:

  

忽略提供程序参数;它不参与此操作。

ReSharper只是注意到该方法的存在,并且在没有ToString的情况下调用IFormatProvider并因此抱怨,在这种情况下,您可以放心地忽略它。

答案 1 :(得分:-2)

我发现了http://csharpindepth.com/Articles/General/Strings.aspx

  

Unicode的一些奇怪之处导致字符串和字符串的奇怪   字符处理。许多字符串方法都是文化敏感的 -   换句话说,他们所做的事情取决于当前的文化   线。 例如,您希望“i”.toUpper()返回什么?   大多数人会说“我”,但在土耳其语中,正确答案是“İ”   (Unicode U + 0130,“拉丁语大写我上面有点”)