在.NET Framework中使用字符串的最佳实践中,推荐使用StringComparison
我同意这一点,因为我可以在同一个目录中创建两个文件:
他们的文件名不同,第二个由
如果采用不变区域比较(而不是序数比较),NTFS 将不允许这些文件,因为在同一篇文章中,他们解释说,在不变区域文化中
OrdinalIgnoreCase
来处理不区分大小写的文件路径。我们称之为语句A。我同意这一点,因为我可以在同一个目录中创建两个文件:
é.txt
é.txt
他们的文件名不同,第二个由
e
和修饰符组成,所以实际上有两个字母。(您可以尝试使用复制粘贴自行验证。)如果采用不变区域比较(而不是序数比较),NTFS 将不允许这些文件,因为在同一篇文章中,他们解释说,在不变区域文化中
a + ̊ = å
但在 String.ToUpperInvariant()
的文章中有不同的建议:(语句 B。)
我需要创建文件路径集合(实际上是如果需要操作系统标识符(例如文件名、命名管道或注册表键)的小写或大写版本,请使用 ToLowerInvariant 或 ToUpperInvariant 方法。
HashSet
)来检测重复项。因此,如果我在创建映射时遵循语句 B,我可能会得到错误的结果,因为上述文件名 é.txt
和 é.txt
将被视为一个。我是否正确理解了 MSDN 中的语句 B 是误导性的?还是我漏掉了什么?
我即将建立一个图书馆,最好从一开始就没有已知的漏洞,因此我不想忽视这一点。
更新:
声明B似乎还有一个问题:不能实际使用ToLowerInvariant()。原因(我引用最佳实践文章):DO:在规范化字符串进行比较时使用ToUpperInvariant而不是ToLowerInvariant。
实际原因:有一小部分字符无法往返,转换为小写会使这些字符无法使用。
(source)