为什么,当我测试null
的集合并将集合作为第一个参数时,如果集合不是null
,它将返回集合,如果它是{{} 1}}它返回null
。
我意识到,如果我将它投射到null
,它就可以解决问题。但是我认为[bool]
会输出一个-eq
值,而不需要演员?
Bool
当我测试一个普通的字符串时,我得到了预期的结果,如下所示:
$objectArray = @('a','b','c','d')
$objectArray -ne $null
<#
a
b
c
d
#>
[bool]($objectArray -ne $null)
#True
$objectArray -eq $null
#Nothing is outputted
[bool]($objectArray -eq $null)
#False
$null -ne $objectArray
#True
$null -eq $objectArray
#False
答案 0 :(得分:3)
它不会“返回集合,如果它不是null”,它返回集合中非空的项“。任何为null的都将被过滤掉(但是没有'任何,所以它不会改变。应用于数组的二元运算符充当过滤器。
'a','b','c' -eq 'b' #output is 'b'
1,2,3,4,5 -lt 3 #output is 1,2
1,2,$null,4,5 -ne $null # output is 1,2,4,5
1,2,$null,4,5 -eq $null # output is $null
您的代码:
[bool]($objectArray -ne $null)
#True
#filters the array, returns some values
#arrays with some things in them cast to true
$objectArray -eq $null
#Nothing is outputted
# nothing in the array was null, no output.
[bool]($objectArray -eq $null)
#False
# filters the array, empty arrays cast to false
当运算符的输入是标量值时,比较运算符 返回一个布尔值。当输入是值的集合时, 比较运算符返回任何匹配值。如果没有比赛 在集合中,比较运算符不返回任何内容。
例外是包含运算符(-Contains,-NotContains), In运算符(-In,-NotIn)和类型运算符(-Is,-IsNot), 它总是返回一个布尔值。
答案 1 :(得分:0)
补充TessellatingHeckler's helpful answer:
要强制评估也接受集合作为要在标量上下文中进行评估的LHS的运算符 - 并因此返回[bool]
实例而不是过滤后的集合 - 将标量放在LHS上:
# ALWAYS returns a [bool], because the LHS (left-hand side) is a SCALAR:
$null -eq $someVariableThatMayBeAscalarOrAnArray
如果你想要执行标量比较以获得布尔结果,那么会产生这种习惯,如果其他操作数恰好发生,你就不会感到惊讶是一个集合。
将(字面)标量放在LHS上可能看起来很奇怪,但理解潜在的问题将有助于过渡。