我刚刚发现当你在一个集合上应用bool运算符时,它就作为该集合的过滤器。
因此,以下内容将返回所有非null的元素:
$objectArray = @('a','b','c','d')
$objectArray -ne $null
但是如何检查集合的引用是否为空?
答案 0 :(得分:2)
Trevor Sullivan的if ()
测试强制$objectArray
强制转换为布尔值。
[bool]$null #is $false
[bool]@(1,2,3) # is $true , so it looks good.
但空阵列误导了它:
[bool]@() # is $false , so it's not an accurate test.
我建议$null -eq $objectArray
:
NB。它确实打开了为什么你想要知道它是否为$ null的问题。 Trevor的答案很典型,足以满足任何常见用途。
NB。我的回答包括一个不常见但有用的建议 - 当你有一个比较的一面的字面值时,如果你可以把它放在左边。
0 -lt $counter
$null -eq $thing
"text" -eq $variable
4 -in $collection
它不太常见,所以看起来不太熟悉,但它更能抵御PowerShell隐式投射做你不期望的事情。
答案 1 :(得分:1)
答案 2 :(得分:0)
以下内容告诉您引用是否为null:
[Object]::ReferenceEquals($objectArray, $null)
测试变量是$true
还是$false
并不总是有效,因为空集合将被强制转换为false:
$objectArray = @()
if (!$objectArray) {
'The array is not actually null'
}