Я використовував наступне, що повертає значення властивості, оскільки воно буде доступне через$thing.$prop
, якщо "властивість" має існувати, а не створювати випадкові винятки. Якщо властивість "не існує" (або має нульове значення), то $null
повертається: цей підхід функціонує в / корисно для жорсткого режиму , оскільки, ну, Gonna Catch 'Em All.
Я вважаю цей підхід корисним, оскільки дозволяє користувацьким об'єктам PS, звичайним .NET-об'єктам, PS HashTables та .NET-колекціям, таким як Dictionary, розглядати як "еквівалентний тип качки" , що, на мою думку, досить добре підходить для 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)
?