Używałem następującego, które zwraca wartość właściwości, tak jak byłoby to dostępne za pośrednictwem$thing.$prop
, gdyby „właściwość” miała istnieć i nie zgłaszać losowego wyjątku. Jeśli właściwość „nie istnieje” (lub ma wartość null), to $null
jest zwracana: to podejście działa w / jest przydatne w trybie ścisłym , ponieważ, no cóż, Gonna Catch 'em All.
Uważam, że to podejście jest przydatne, ponieważ pozwala obiektom niestandardowym PS, zwykłym obiektom .NET, tabelom PS HashTables i kolekcjom .NET, takim jak Dictionary, być traktowane jako „odpowiedniki pisane kaczką” , co moim zdaniem dobrze pasuje do programu PowerShell.
Oczywiście nie spełnia to ścisłej definicji „ma właściwość”… do której to pytanie można wyraźnie ograniczyć. Jeśli zaakceptujesz szerszą definicję „właściwości” przyjętą w tym miejscu, metoda może zostać w trywialny sposób zmodyfikowana, aby zwracała wartość logiczną.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Przykłady:
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"
I takie zachowanie może nie [zawsze] być pożądane… tj. nie można odróżnić od x.Count
i x["Count"]
.
($object.property -ne $null)
?