How do you want things to behave?
If you want arrays with no elements to be treated the same as unassigned arrays, use:
[array]$foo = @() #example where we'd want TRUE to be returned
@($foo).Count -eq 0
If you want a blank array to be seen as having a value (albeit an empty one), use:
[array]$foo = @() #example where we'd want FALSE to be returned
$foo.PSObject -eq $null
If you want an array which is populated with only null values to be treated as null:
[array]$foo = $null,$null
@($foo | ?{$_.PSObject}).Count -eq 0
NB: In the above I use $_.PSObject
over $_
to avoid [bool]$false
, [int]0
, [string]''
, etc from being filtered out; since here we're focussed solely on nulls.