首页 > 解决方案 > 具有 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

标签: powershell

解决方案


您当前使用的语法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)


推荐阅读