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 的建议是否错误? 的相关文章

  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • Javascript:返回字符串中的最后一个单词

    正确的做法 我有一个words字符串中有两个单词 我需要返回最后一个单词 它们之间用 分隔 我该怎么做呢 function test words var n words indexOf var res words substring n 1
  • 在 C# 中替换文本,同时保持大小写不变

    我有一组句子需要用来进行替换 例如 abc gt cde ab df gt de 我有一个文本可以在哪里进行更改 但是我无法事先知道所述文本的大小写 因此 举例来说 如果我有 A bgt abc hyi Abc Ab df h 我必须更换并
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • 文件显示在 Visual Studio 的解决方案资源管理器中,并带有快捷方式图标。这意味着什么?

    我已经下载了FParsec的库源代码 所有文件都带有快捷方式符号 这是什么意思 当该项目添加到该项目时 它被添加为链接Project gt Add Existing Item gt Add as Link 该文件很可能托管在目录结构中的另一
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • C#:询问用户密码,然后将其存储在 SecureString 中

    在我目前为客户开发的小型应用程序中 我需要询问用户他的 Windows 登录用户名 密码和域 然后使用这些信息系统 诊断 进程 启动启动一个应用程序 我有一个带有 UseSystemPasswordChar 的文本框来屏蔽输入的密码 我需要
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 将变量作为参数传递与传递另一个函数的返回值时出现“无效过程调用”错误

    我收到错误 无效的过程调用或参数 AddRange 当传递一个变量到ArrayList AddRange https msdn microsoft com en US library zhfwys3c 28v vs 110 29 aspx
  • string.Empty 与 null。您使用哪一个?

    最近工作的同事告诉我不要使用string Empty设置字符串变量时但使用null因为它污染了堆栈 他说不做 string myString string Empty but do string mystring null 真的有关系吗 我
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐