gpt4 book ai didi

.net - ToUpperInvariant() – MSDN 的建议是否错误?

转载 作者:行者123 更新时间:2023-12-02 11:20:15 28 4
gpt4 key购买 nike

Best Practices for Using Strings in the .NET Framework , 字符串比较 OrdinalIgnoreCase建议用于不区分大小写的文件路径。 (我们称之为语句 A。)

我同意这一点,因为我可以在同一目录中创建两个文件:

é.txt
é.txt

它们的文件名不一样,第二个是由e和修饰符组成的,所以它实际上有两个字母。 (您可以尝试使用复制粘贴。)

如果存在有效的不变区域性比较(而不是序数比较),NTFS 将不允许这些文件,因为在同一篇文章中他们解释说,在不变区域性中 a + ̊ = å

但是在关于String.ToUpperInvariant()的文章中有不同的建议:(声明B.)

If you need the lowercase or uppercase version of an operating system identifier, such as a file name, named pipe, or registry key, use the ToLowerInvariant or ToUpperInvariant methods.

我需要创建文件路径集合(实际上是HashSet)来检测重复项。因此,如果我在创建 map 时遵守语句 B,则可能会出现误报,因为上述文件名 é.txté.txt 将被视为一个。我是否正确理解 MSDN 中的陈述 B 具有误导性?或者我错过了什么?

我即将构建一个库,最好从一开始就没有已知的错误,所以我只是不想忽略这一点。

更新:

语句 B 似乎还有一个问题:ToLowerInvariant() 无法实际使用。原因(我引用最佳实践文章):DO:在规范化字符串进行比较时使用 ToUpperInvariant 而不是 ToLowerInvariant。 实际原因:有一小部分字符不往返,并且要小写将使这些字符不可用。 ( source )

最佳答案

当您想要不区分大小写地比较字符串是否相等时,大写和小写都不正确。在这两种变体中,都有一些角色把事情搞砸了。

不区分大小写比较字符串的正确方法是使用不敏感的 StringComparison 选项之一(您知道这一点)。

不区分大小写地使用数据结构的正确方法是使用StringComparer.*IgnoreCase之一。例如:

new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)

在将字符串添加到数据结构之前,请勿使用大写字符串。在任何代码审查中我都会失败。

If you need the lowercase or uppercase version of an operating system identifier

你不需要那样的东西。此声明不适用于您的情况。

关于.net - ToUpperInvariant() – MSDN 的建议是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com