「プロパティ」が存在し、ランダムな例外をスローしない場合は、を介してアクセスされるため、プロパティ値$thing.$prop
を返す次のものを使用しています。プロパティが「存在しない」(またはnull値を持っている)場合$null
は、返されます。このアプローチは、厳密モードで機能します。これは、すべてをキャッチするためです。
このアプローチは、PSカスタムオブジェクト、通常の.NETオブジェクト、PS HashTables、およびDictionaryなどの.NETコレクションを「ダックタイプの同等物」として扱うことができるため便利です。これは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)
?