"속성"이 존재하고 임의의 예외를 throw하지 않는 경우 를 통해 액세스 할 수 있으므로 속성 값$thing.$prop
을 반환 하는 다음을 사용하고 있습니다 . 속성이 "존재하지 않음"(또는 null 값이 있음)이면 $null
반환됩니다.이 접근 방식은 엄격 모드 에서 작동 / 유용 합니다 . 왜냐하면 Gonna Catch 'em All.
이 접근 방식 은 PS Custom Objects, 일반 .NET 개체, PS HashTables 및 Dictionary와 같은 .NET 컬렉션을 "duck-typed equivalent"로 취급 할 수 있기 때문에 유용 하며 PowerShell에 상당히 적합하다고 생각합니다.
물론, 이것은 이 질문이 명시 적으로 제한 될 수있는 "속성 있음".. 의 엄격한 정의를 충족하지 않습니다 . 여기서 가정 한 "속성"의 더 큰 정의를 받아들이면 부울을 반환하도록 메서드를 사소하게 수정할 수 있습니다.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
예 :
Get-PropOrNull (Get-Date) "Date"
Get-PropOrNull (Get-Date) "flub"
Get-PropOrNull (@{x="HashTable"}) "x"
Get-PropOrNull ([PSCustomObject]@{x="Custom"}) "x"
$oldDict = New-Object "System.Collections.HashTable"
$oldDict["x"] = "OldDict"
Get-PropOrNull $d "x"
그리고이 동작은 [항상] 바람직하지 않을 수도 있습니다. 즉. x.Count
과 를 구별 할 수 없습니다 x["Count"]
.
($object.property -ne $null)
?