如何检查集合是否具有空引用

时间:2016-11-03 03:29:48

标签: powershell

我刚刚发现当你在一个集合上应用bool运算符时,它就作为该集合的过滤器。

因此,以下内容将返回所有非null的元素:

$objectArray = @('a','b','c','d')
$objectArray -ne $null

但是如何检查集合的引用是否为空?

3 个答案:

答案 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.

Example screenshot of testing an empty array

我建议$null -eq $objectArray

Example of using $null -eq $objectArray

NB。它确实打开了为什么你想要知道它是否为$ null的问题。 Trevor的答案很典型,足以满足任何常见用途。

NB。我的回答包括一个不常见但有用的建议 - 当你有一个比较的一面的字面值时,如果你可以把它放在左边。

0 -lt $counter
$null -eq $thing
"text" -eq $variable
4 -in $collection

它不太常见,所以看起来不太熟悉,但它更能抵御PowerShell隐式投射做你不期望的事情。

答案 1 :(得分:1)

您只需测试$true$false的变量即可。如果它是$false,那么它就是一个空引用,否则则相反。

if (!$objectArray) {

}

enter image description here

答案 2 :(得分:0)

以下内容告诉您引用是否为null:

[Object]::ReferenceEquals($objectArray, $null)

测试变量是$true还是$false并不总是有效,因为空集合将被强制转换为false:

$objectArray = @()
if (!$objectArray) {
   'The array is not actually null'
}