ToLowerInvariant()有什么问题?

时间:2010-05-10 09:15:56

标签: c# .net .net-4.0

我有以下代码行:

var connectionString = configItems.
                Find(item => item.Name.ToLowerInvariant() == "connectionstring");

VS 2010代码分析告诉我以下内容:

  

警告7 CA1308:Microsoft.Globalization:在方法中......用String.ToUpperInvariant()替换对'string.ToLowerInvariant()'的调用。

这是否意味着ToUpperInvariant()更可靠?

2 个答案:

答案 0 :(得分:90)

Google提供了一个指向CA1308: Normalize strings to uppercase

的提示

它说:

  

字符串应规范化为大写。一小组字符在转换为小写字符时无法进行往返。进行往返意味着将字符从一个区域设置转换为另一个区域设置,以不同方式表示字符数据,然后从转换后的字符中准确地检索原始字符。

所以,是的 - ToUpper比ToLower更可靠。

将来我建议谷歌搜索 - 我为所有那些FxCop警告我这样做我被抛出;)帮助了很多阅读相应的文档;)

答案 1 :(得分:20)

除了TomTom所说的,.net还是以大写字母进行字符串比较的优化。所以使用上不变量理论上比下变量更快。

在CLR中通过C#确实说明了这一点,如评论中所指出的那样。 以下链接引用了本书的这一部分。我不确定这当然是否真的如此,因为MSDN上没有关于这个主题的内容。 msdn上的字符串比较指南提到toupperinvariant和tolowerinvariant是相同的,不喜欢前者。

String comparisons in C#