PS U:\> $bookmark = $null
PS U:\> $XPPS = "145024-9999"
PS U:\> $bookmark += ,("145024-9999",0100,$false)
PS U:\> $bookmark -contains $XPPS
False
起初我很困惑,但后来我运行了这些命令:
PS U:\> $bookmark -contains 100
False
PS U:\> $bookmark -contains $false
False
现在我确定我错过了-contains
的一些基本概念,这里有什么问题?
答案 0 :(得分:3)
“逗号运算符”,
创建一个外部数组,因此contains-operator的行为与它应该完全相同。
$XPPS = "145024-9999"
$bookmark = $null
$bookmark += ,("145024-9999",0100,$false)
$bookmark.Count
1
$bookmark[0].Count
3
你看到了问题吗? $bookmark
不是ARRAY("145024-9999",0100,$false)
,而是ARRAY(ARRAY("145024-9999",0100,$false))
$bookmark[0] -contains 100
True
如果您希望书签是单级数组,请删除数组运算符。
$XPPS = "145024-9999"
$bookmark = $null
$bookmark += ("145024-9999",0100,$false)
$bookmark -contains $XPPS
$bookmark -contains $XPPS
True
答案 1 :(得分:2)
将一元,
放在一个计算结果为数组的表达式之前会创建一个嵌套数组:
$bookmark += ,("145024-9999",0100,$false)
所以,$bookmark
现在是一个包含单个项目的数组(也恰好是一个数组):
PS C:\> $bookmark += ,("145024-9999",0100,$false)
PS C:\> $bookmark[0]
145024-9999
100
False
PS C:\> $bookmark[0][0]
145024-9999
PS C:\> $bookmark[0] -contains $false
True
使用数组子表达式运算符(@()
)代替:
PS C:\> $bookmark += @("145024-9999",0100,$false)
PS C:\> $bookmark -contains $false
True
答案 2 :(得分:1)
这是因为您使用$bookmark
,(...)
如果您使用[0]
访问它,则可以:
$bookmark[0] -contains $XPPS
True