C# 当没有显式指定CultureInfo时,为什么ReSharper在Char.ToString()处发出警告?

C# 当没有显式指定CultureInfo时,为什么ReSharper在Char.ToString()处发出警告?,c#,resharper,cultureinfo,C#,Resharper,Cultureinfo,我想知道,当我试图将字符转换为字符串而不提供特定的区域性信息时,ReSharper为什么会警告我 有没有可能在两个系统上进行不同的转换 示例: var str = ' '.ToString(); 默认情况下,将弹出以下ReSharper警告: 在字符串转换中显式指定区域性 我找到了这个 Unicode的一些奇怪之处导致字符串和 字符处理。许多字符串方法都是区域性敏感的- 换句话说,他们做什么取决于当前的文化 线例如,您希望“i”.toUpper()返回什么? 大多数人会说“我”,但在土耳其语中

我想知道,当我试图将字符转换为字符串而不提供特定的区域性信息时,ReSharper为什么会警告我

有没有可能在两个系统上进行不同的转换

示例:

var str = ' '.ToString();
默认情况下,将弹出以下ReSharper警告:

在字符串转换中显式指定区域性

我找到了这个

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


这是因为ReSharper看到类型实现了
IConvertible
,它具有
ToString(IFormatProvider)

System.Char
本身不会公开具有该签名的公共方法,即使指示它:

如果使用
IFormatProvider
参数查看重载,您将看到以下注意事项:

实现
IConvertible.ToString(IFormatProvider)

这句话:

忽略provider参数;它不参与此操作


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

警告到底是什么?请根据您的问题创建一个解决方案。代码到底是什么?这是一个好问题,我已经问过自己很多次了。但是您需要添加示例代码和确切的消息,我想警告会在所有具有接受
CultureInfo
的重载的类/结构上触发。由于IFormatProvider可以根据输入返回任何内容,因此可能会返回不同的内容,这不是重点。在这种情况下没有
touper
ToLower
方法。我喜欢这个答案,但它还没有直接回答我的(第二个)问题:忽略它,不同系统之间是否有任何副作用。我想根据你给我的所有信息得出一个直接的结论。:)不,“你可以放心地忽略它”。一个字符将被转换为一个字符的字符串,这里没有转换。也显示了这一点。