测试集合为null

时间:2016-11-03 01:32:19

标签: powershell

为什么,当我测试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

2 个答案:

答案 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上可能看起来很奇怪,但理解潜在的问题将有助于过渡。