ToLowerInvariant()有什么问题?

我有以下的代码行:

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

VS 2010代码分析告诉我以下几点:

警告7 CA1308:Microsoft.Globalization:在方法中…使用String.ToUpperInvariant()将调用replace为“string.ToLowerInvariant()”。

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

Google提供了一个指向CA1308的提示:将string标准化为大写字母

它说:

string应该标准化为大写字母。 一小部分人物被转换为小写字母时,不能往返。 进行往返意味着将字符从一种语言环境转换为另一种不同的表示字符数据的语言环境,然后从转换的字符中准确检索原始字符。

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

在将来,我build议首先使用Googlesearch – 我为所有这些FxCop警告我这样做;)帮助了很多阅读相应的文档;)

除了TomTom所说的,.net是针对大写string比较而优化的。 所以使用上面的不variables在理论上要比lowerinvariant更快。

正如在评论中指出的那样,CLR通过C#确实是这样说的。 以下链接引用了本书的一部分。 我不确定这当然是真的,因为在MSDN上没有关于这个主题的东西。 msdn上的string比较指南提到toupperinvariant和tolowerinvariant是平等的,不喜欢前者。

在C#中的string比较