我有以下代码行:
var connectionString = configItems.
Find(item => item.Name.ToLowerInvariant() == "connectionstring");
VS 2010代码分析告诉我以下内容:
警告7 CA1308:Microsoft.Globalization:在方法中......用String.ToUpperInvariant()替换对'string.ToLowerInvariant()'的调用。
这是否意味着ToUpperInvariant()
更可靠?
答案 0 :(得分:90)
Google提供了一个指向CA1308: Normalize strings to uppercase
的提示它说:
字符串应规范化为大写。一小组字符在转换为小写字符时无法进行往返。进行往返意味着将字符从一个区域设置转换为另一个区域设置,以不同方式表示字符数据,然后从转换后的字符中准确地检索原始字符。
所以,是的 - ToUpper比ToLower更可靠。
将来我建议谷歌搜索 - 我为所有那些FxCop警告我这样做我被抛出;)帮助了很多阅读相应的文档;)
答案 1 :(得分:20)
除了TomTom所说的,.net还是以大写字母进行字符串比较的优化。所以使用上不变量理论上比下变量更快。
在CLR中通过C#确实说明了这一点,如评论中所指出的那样。 以下链接引用了本书的这一部分。我不确定这当然是否真的如此,因为MSDN上没有关于这个主题的内容。 msdn上的字符串比较指南提到toupperinvariant和tolowerinvariant是相同的,不喜欢前者。