2016-11-03 3 views
2

모음에 대해 bool 연산자를 적용하면 해당 컬렉션에 대한 필터로 작동한다는 것을 발견했습니다. 컬렉션에 null 참조가 있는지 확인하는 방법

그래서 다음은 널 (null)이 아닌 모든 요소를 ​​반환합니다

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

을하지만 어떻게 컬렉션의 참조가 null의 경우 확인할 수 있습니까?

답변

2

트레버 설리반의 if() 시험은 부울로 캐스팅하기 위해 $objectArray을 강제로.

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

그러나 빈 배열을 오해 :

Example screenshot of testing an empty array

[bool]@()  # is $false , so it's not an accurate test. 
내가 $null -eq $objectArray을 제안 :

Example of using $null -eq $objectArray

NB합니다. 이 왜 인 지 궁금해합니다. 특히 $ null인지 확인하십시오. Trevor의 대답은 일반적이며 일반적으로 사용하기에 충분합니다.

NB. 내 답변에는 흔하지 않지만 유용한 제안이 포함되어 있습니다. 비교의 한면에 대한 글자 그대로의 가치가있는 경우 가능한 경우 왼쪽에 배치하십시오.

는 너무 익숙 보이지만, 그것은 당신이 기대하지 않는 뭔가를하고 PowerShell을 암시 적 캐스팅에 대한 더 탄력있어, 덜 일반적입니다.

1

$true 또는 $false에 대한 변수를 테스트하기 만하면됩니다. $false이면 null 참조이고, 그렇지 않으면 반대입니다.

if (!$objectArray) { 

} 

enter image description here

+0

어떤 약을 : 변수가

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

테스트 경우는, 하늘의 콜렉션이 거짓으로 캐스팅 때문에 $true 또는 $false 항상 작동하지 않습니다 '$ objectArray = @(); if (! $ objectArray) { '그것은 $ null 괜찮아요!' }'? -> http://i.imgur.com/QddEqRv.png – TessellatingHeckler

+0

좋은 지적. 그것은 null이 아닙니다. 그러나 Object []의 빈 인스턴스입니다. $ objectArray는 true를 반환합니다. –

+0

@Backwards_Dave 예. 테스트 결과 "null"이지만 그렇지 않습니다. 따라서 그것은 좋은 시험이 아닙니다. 다른 것들도'[false] '로 캐스팅되었습니다.이 테스트는'$ objectArray = 0'와'$ objectArray = ""와 같이 다른 것들이 null이라고 말합니다. – TessellatingHeckler

0

참조가 null의 경우 다음 당신을 알려줍니다

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