powershell - 具有 InvariantCultureIgnoreCase 的 PowerShell HashSet 仍包含区分大小写
问题描述
为什么第二个包含返回false?
PS C:\Users\s> $filesToExclude = New-Object 'System.Collections.Generic.HashSet[string]([StringComparer]::InvariantCultureIgnoreCase)'
PS C:\Users\s> $filesToExclude.Add("WHATEVER")
True
PS C:\Users\s> $filesToExclude.Contains("whatever")
False
PS C:\Users\s> $filesToExclude.Contains("WHATEVER")
True
解决方案
您当前使用的语法New-Object
是关闭的 - 类型名称和构造函数参数将作为单独的参数传递给单独的参数 - 这导致该StringComparer
部分被 PowerShell 完全忽略。
# works in PowerShell 2.0 and up
$hashset = New-Object -TypeName 'System.Collections.Generic.HashSet[String]' -ArgumentList ([StringComparer]::InvariantCultureIgnoreCase)
# works in PowerShell 5.0 and up
$hashset = [System.Collections.Generic.HashSet[String]]::new([StringComparer]::InvariantCultureIgnoreCase)
推荐阅读
- javascript - 引导带中的下拉不起作用 - 在控制台中显示 popper.js
- jenkins - 我们如何选择在 Active Choice Reactive Reference Parameter 中输入文本输入并能够在其 groovy 脚本中读取文件参数?
- python - 如何解决 Python 3 中的这个缩进错误?
- xml - 如何删除除少数特定空标签外的空 xml 元素
- python - 如何将给定文本文件中从元音开始的单词写入另一个文本文件?
- kotlin - 为什么返回:kotlin.Unit
- svn - 如何使用 TortoiseSVN 从文件同步混淆中恢复
- mql4 - 数组超出范围 mql4
- java - SQLite 按列值的一部分过滤记录
- anylogic - 为不同的流程使用中央数据库并通过动态事件获取访问权限