2016-11-03 3 views
2

Я только что обнаружил, что когда вы применяете операторы bool в коллекции, она действует как фильтр в этой коллекции.Как проверить, имеет ли коллекция нулевую ссылку

Так следующее возвращает все элементы, которые не являются нулем:

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

Но как я могу проверить, если ссылка на коллекции является нулевой?

ответ

2

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. Ответ Тревора типичен и достаточно хорош для любого общего использования.

NB. Мой ответ включает необычное, но полезное предложение - когда у вас есть буквальное значение для одной стороны сравнения, поместите его слева, если сможете.

Это меньше общего, так выглядит менее знакомы, но это более устойчивыми против PowerShell неявной делать то, что вы не ожидали.

1

Все, что вам нужно сделать, это проверить переменную для $true или $false. Если это $false, то это нулевая ссылка, иначе будет верно обратное.

if (!$objectArray) { 

} 

enter image description here

+0

Что о '$ objectArray = @(); if (! $ objectArray) {'Это $ нуль! } '? -> http://i.imgur.com/QddEqRv.png – TessellatingHeckler

+0

Хорошая точка. это не null. Это пустой экземпляр Object [], однако! ObjectArray возвращает true. –

+0

@Backwards_Dave Да. Тест говорит, что «это нулевое», но это не так. Так что это не очень хороший тест. Другие вещи, относящиеся к '[false]', также - этот тест сказал бы, что другие вещи были нулевыми, например '$ objectArray = 0' и' $ objectArray = "" '. – TessellatingHeckler

0

Следующая говорит вам, если ссылка является недействительным:

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

Тестирование, если переменная $true или $false не всегда работает, потому что пустая коллекция будет отбрасывать ложь:

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