"Özellik" var olacaksa ve rastgele bir istisna oluşturmayacaksa, aracılığıyla erişilebileceği gibi özellik değerini döndüren$thing.$prop
aşağıdakileri kullanıyorum . Eğer özelliği "yoksa" (veya boş bir değere sahipse) $null
döndürülür: bu yaklaşım katı modda çalışır / yararlıdır , çünkü hepsini Yakalayacağım.
Bu yaklaşımı kullanışlı buluyorum çünkü PS Özel Nesneleri, normal .NET nesneleri, PS HashTable'lar ve Dictionary gibi .NET koleksiyonlarının PowerShell için oldukça uygun olduğunu düşündüğüm "ördek tipi eşdeğer" olarak değerlendirilmesine izin veriyor.
Elbette bu, "bir özelliğe sahiptir" ifadesinin katı tanımına uymuyor .. ki bu soru açıkça bununla sınırlı olabilir. Burada varsayılan "özellik" kavramının daha büyük tanımını kabul ederseniz, yöntem bir boole döndürmek için önemsiz bir şekilde değiştirilebilir.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Örnekler:
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"
Ve bu davranış [her zaman] istenmeyebilir .. yani. x.Count
ve arasında ayrım yapmak mümkün değildir x["Count"]
.
($object.property -ne $null)
?