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

2024-05-12

In 在 .NET Framework 中使用字符串的最佳实践 https://msdn.microsoft.com/en-us/library/dd465121(v=vs.110).aspx, 字符串比较OrdinalIgnoreCase https://msdn.microsoft.com/en-us/library/system.stringcomparison(v=vs.110).aspx建议用于不区分大小写的文件路径。 (我们称之为语句 A。)

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

é.txt
é.txt

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

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

但在文章中String.ToUpperInvariant() https://msdn.microsoft.com/en-us/library/system.string.toupperinvariant(v=vs.110).aspx有不同的建议:(陈述B.)

如果需要操作系统标识符的小写或大写版本,例如文件名、命名管道或注册表项,请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

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

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

Update:

语句 B 似乎还有一个问题:ToLowerInvariant() 无法实际使用。原因(我引用最佳实践文章):DO: Use ToUpperInvariant rather than ToLowerInvariant when normalizing strings for comparison.实际原因:There is a small range of characters that do not roundtrip, and going to lowercase will make these characters unavailable. (source http://blogs.msdn.com/b/bclteam/archive/2005/06/01/424012.aspx#comments)


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

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

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

new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)

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

如果您需要操作系统标识符的小写或大写版本

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ToUpperInvariant() – MSDN 的建议是否错误? 的相关文章

  • Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

    以下项目有不同的目标 但我很有趣知道它们如何 暂停 问题 Thread sleep 它会影响系统性能吗 它是否会占用线程的等待时间 关于什么Monitor Wait 他们 等待 的方式有何不同 他们的等待会占用一个线程吗 关于什么Regis
  • String.GetHashCode() 返回不同的值

    为什么 GetHashCode 对同一字符串返回不同的值 我无法描述如何复制它 但相信这不是一个恶作剧 并且以下两行来自我的监视窗口在两个不同的时间 DDD Events Application ApplicationReferenceCr
  • .NET 中应用程序域的常见用途和最佳实践?

    关于何时在应用程序中创建新的应用程序域 有哪些准则和最佳实践 另外 有哪些常见用途以及如何在应用程序中使用多个应用程序域的示例 我见过的最常见的场景是能够通过与主程序不同的安全模型提供可扩展性 在单独的 AppDomain 中加载插件可以实
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • Winforms——多选下拉列表

    我正在寻找一个允许我选择多个项目的下拉列表控件 类似于 CheckedListbox 但采用下拉列表形式 我不希望它占据屏幕的很大一部分 此时我非常确信 NET 中不存在这样的内置控件 请注意 这是 Winforms 而不是 ASP NET
  • Microsoft.Bcl.Async 中是否有 ExceptionDispatchInfo 的类似物?

    有没有类似的ExceptionDispatchInfo http msdn microsoft com en us library system runtime exceptionservices exceptiondispatchinfo
  • “如何判断 Python 中的字符串是否重复?”的更复杂版本

    我正在读书这个帖子 https stackoverflow com questions 29481088 how can i tell if a string repeats itself in python我想知道是否有人可以找到将重复的
  • 如何使用 RSA-SHA1 算法对 xml 元素进行签名?

    我需要使用 RSA SHA1 算法签署 并最终验证 XML 文档的节点之一 w3 org 链接 https www w3 org TR xmlsec algorithms RSA SHA1 网址 http www w3 org 2000 0
  • 尽管进行了程序集重定向并加载了正确的版本,但程序集仍不匹配

    我的控制台应用程序使用依赖于 Newtonsoft Json v4 5 0 0 的 System Net Http Formatting v5 1 0 0 然而 我的应用程序包含 Newtonsoft Json v6 0 0 0 出于其他原
  • Visual Studio 2010 的“线程”窗口中的 和 [Thread Destroyed] 详细信息

    我一直在尝试调试与一个应用程序的线程相关的一些问题 当我附加到应用程序时 我看到一个像这样的窗口 这个名为 Thread Destroyed 的线程是什么 应用程序代码肯定不会写这个名称 这意味着线程的调用堆栈不可用 采集引擎 线程在应用程
  • C# 最小化所有打开的窗口

    我在论坛上看到了这个 C 代码 它最小化了所有打开的窗口 define MIN ALL 419 define MIN ALL UNDO 416 int main int argc char argv HWND lHwnd FindWindo
  • 如何更改特定元素的 XML 命名空间

    我有一些通过某些 WCF 消息的 xmlserialization 生成的 xml 集 现在我想创建一个通用方法 在其中提供 xml 文件名和前缀 例如mailxml12 然后在 xml 文件中 那些名称中没有任何命名空间前缀的元素应替换为
  • 构建 Internet Explorer 扩展/附加组件?

    我想为 IE 7 8 构建一个浏览器扩展 我想使用 NET 来做到这一点 您知道我可以参考哪些资源或教程来执行此操作吗 我还没有发现太多 Thanks JP 使 IE 扩展难以开发的主要问题之一是需要使用 C 或 NET 进行开发 另一方面
  • 将字符串解析为结构变量

    我试图将字符串解析为其中包含不同变量的结构向量 这是我到目前为止所拥有的 但似乎不起作用 struct client string PhoneNumber string FirstName string LastName string Ag
  • 缺少嵌入互操作类型属性

    在一个 C 项目中 我收到以下警告 警告 CS1762 创建了对嵌入式互操作程序集 Interop SomeLibrary dll 的引用 因为间接引用了程序集 ALibraryOfMine dll 创建的该程序集 考虑更改任一程序集的 嵌
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 调整屏幕和字体设置的 WPF 应用程序(或者,我如何将 DLU 与 WPF 中的单元相关联?)

    在MFC中 对话框的设计使用DLUs http msdn microsoft com en us library bb847924 aspx 在 WPF 中 我们以 1 96 英寸为单位指定 虽然这确实会缩放窗口和视觉元素 但我们如何使 W
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind

随机推荐