C# 当没有显式指定CultureInfo时,为什么ReSharper在Char.ToString()处发出警告?
我想知道,当我试图将字符转换为字符串而不提供特定的区域性信息时,ReSharper为什么会警告我 有没有可能在两个系统上进行不同的转换 示例:C# 当没有显式指定CultureInfo时,为什么ReSharper在Char.ToString()处发出警告?,c#,resharper,cultureinfo,C#,Resharper,Cultureinfo,我想知道,当我试图将字符转换为字符串而不提供特定的区域性信息时,ReSharper为什么会警告我 有没有可能在两个系统上进行不同的转换 示例: var str = ' '.ToString(); 默认情况下,将弹出以下ReSharper警告: 在字符串转换中显式指定区域性 我找到了这个 Unicode的一些奇怪之处导致字符串和 字符处理。许多字符串方法都是区域性敏感的- 换句话说,他们做什么取决于当前的文化 线例如,您希望“i”.toUpper()返回什么? 大多数人会说“我”,但在土耳其语中
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
方法。我喜欢这个答案,但它还没有直接回答我的(第二个)问题:忽略它,不同系统之间是否有任何副作用。我想根据你给我的所有信息得出一个直接的结论。:)不,“你可以放心地忽略它”。一个字符将被转换为一个字符的字符串,这里没有转换。也显示了这一点。