.contains()vs -contains,一个返回true,另一个返回false

问题描述 投票:-1回答:2

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

$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
2个回答
1
投票

从MS文档:

-Contains
      Description: Containment operator. Tells whether a collection of reference
      values includes a single test value. Always returns a Boolean value. Returns TRUE
      only when the test value exactly matches at least one of the reference values. 

.Contains()方法是支持子串的String对象的方法之一因此当你运行True时为什么你得到$Path.Contains($env:username)


1
投票

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

当测试值是集合时,Contains运算符使用引用相等性。仅当其中一个引用值与测试值对象的实例相同时,它才返回TRUE。

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

$Path.Keys -contains $env:username
© www.soinside.com 2019 - 2024. All rights reserved.