2016-11-03 4 views
2

Ich habe gerade festgestellt, dass wenn Sie Bool-Operatoren auf eine Sammlung anwenden, sie als Filter für diese Sammlung fungiert.So überprüfen Sie, ob eine Sammlung eine Nullreferenz hat

So wird folgendes alle Elemente zurück, die nicht null sind:

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

Aber wie kann ich überprüfen, ob der Verweis der Sammlung null ist?

Antwort

2

Trevor if() Test Sullivan zwingt den $objectArray zu einem boolean zu werfen.

[bool]$null  #is $false 
[bool]@(1,2,3) # is $true , so it looks good. 

Aber leere Arrays täuschen es:

[bool]@()  # is $false , so it's not an accurate test. 

Example screenshot of testing an empty array

Ich schlage vor, $null -eq $objectArray:

Example of using $null -eq $objectArray

NB. Es öffnet sich wirklich die Frage, warum Sie wollen wissen, ob es $ null ist, speziell. Trevors Antwort ist typisch und gut genug für jeden gewöhnlichen Gebrauch.

NB. Meine Antwort enthält einen ungewöhnlichen, aber nützlichen Vorschlag - wenn Sie einen literalen Wert für eine Seite eines Vergleichs haben, legen Sie ihn auf der linken Seite, wenn Sie können.

Es ist weniger verbreitet, sieht so weniger vertraut, aber es ist belastbarer gegenüber Powershell implizites Casting etwas zu tun, Sie nicht erwarten.

1

Alles, was Sie tun müssen, ist die Variable $true oder $false zu testen. Wenn es $false ist, dann ist es eine Nullreferenz, andernfalls ist das Gegenteil wahr.

if (!$objectArray) { 

} 

enter image description here

+0

Was '$ objectArray = @(); if (! $ objectArray) {'Es ist $ null in Ordnung!' } '? -> http://i.imgur.com/QddEqRv.png – TessellatingHeckler

+0

Guter Punkt. es ist nicht null. Es ist jedoch eine leere Instanz von Object []! $ ObjectArray gibt true zurück. –

+0

@ Backwards_Dave Ja. Der Test sagt "es ist null", aber es ist nicht. Es ist also kein guter Test. Andere Dinge werden auch nach '[false]' umgewandelt - dieser Test würde sagen, dass andere Dinge null waren, wie '$ objectArray = 0' und' $ objectArray = "" 'ebenfalls. – TessellatingHeckler

0

Im Folgenden erfahren Sie, wenn der Referenz null ist:

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

Prüfung, ob die Variable $true oder $false ist nicht immer funktioniert, weil eine leere Sammlung falsch gegossen wird:

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