我一直在使用下面的方法来返回属性值,因为$thing.$prop
如果存在“属性”并且不会引发随机异常,则可以通过进行访问。如果属性“不存在”(或具有空值),则$null
返回:此方法在严格模式下起作用,/对严格模式有用,因为,好吧,他们会抓住一切。
我发现这种方法很有用,因为它允许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)
?