我有以下代码行:
var connectionString = configItems.
Find(item => item.Name.ToLowerInvariant() == "connectionstring");
Run Code Online (Sandbox Code Playgroud)
VS 2010代码分析告诉我以下内容:
警告7 CA1308:Microsoft.Globalization:在方法中...用String.ToUpperInvariant()替换对'string.ToLowerInvariant()'的调用.
这意味着ToUpperInvariant()更可靠吗?
这主要是一个我非常好奇的理论问题.(我不是试图通过自己编写或任何东西来做到这一点,我不是在重新发明轮子.)
我的问题是大写/小写等价表如何适用于Unicode.
例如,如果我必须在ASCII中执行此操作,我会使用一个字符,如果它在[az]范围内,我会将A和a之间的差值相加.
如果它不属于该范围,我会为10个左右的重音字符加上一个小等价表加上ñ.(或者,我可以只有一个包含256个条目的完整等价数组,其中大多数与输入相同)
但是,我猜测有一种更好的方法来指定Unicode中的等价,假设有数十万个字符,理论上,可以添加一种新语言或一组字符(我期待你当发生这种情况时,不需要修补窗口).
Windows是否为每个字符都有一个巨大的硬编码等价表?或者这是如何实现的?
一个相关的问题是SQL Server如何实现基于Unicode的重音不敏感和不区分大小写的查询.它是否有一个内部表格,告诉它éëeÉÉ和Ë都等同于"e"?
在比较字符串时,这听起来不是很快.
它如何快速访问索引?它是否已将索引值转换为其"基本"字符,对应于该字段的整理?
有谁知道这些东西的内部?
谢谢!