首页 > 解决方案 > .contains() vs -contains,一个返回true,另一个返回false

问题描述

我有一个像这样的哈希表:

$Path = @{
    "BM"    = "\\srv\xy"
    "BB4-L" = "\\srv\xy"
    "BB4-R" = "\\srv\xy"
    "HSB"   = "\\srv\xy"
    "IB"    = "\\srv\xy"
    "LM1"   = "\\srv\xy"
    "LM2"   = "\\srv\xy"
    "sis"   = "\\srv\xy"
}

$env:username是姐姐。为什么.contains()-contains东西不一样?

PS Z:\Powershell-Scripts\Functions> $Path -contains $env:username
False

PS Z:\Powershell-Scripts\Functions> $Path.contains($env:username)
True

如果可能,我总是喜欢使用 PowerShell 语法,但在这种情况下我不能,因为-contains会返回 false。

.contains()什么-contains不同?

标签: powershell

解决方案


$Path是一个System.Collections.Hashtable。您还可以阅读以下文档:

当测试值是一个集合时,包含运算符使用引用相等。仅当参考值之一是测试值对象的同一实例时,它才返回 TRUE。

哈希表中的每一项都是System.Collections.DictionaryEntry. 您正在将其与string. 由于类型不匹配,引用也不匹配。Contains(System.Object key)ContainsKey(System.Object key)使用密钥进行测试。为了在比较中保持一致,您应该编写:

$Path.Keys -contains $env:username

推荐阅读