Saya telah menggunakan berikut ini yang mengembalikan nilai properti, karena akan diakses melalui$thing.$prop
, jika "properti" akan ada dan tidak membuang pengecualian acak. Jika properti "tidak ada" (atau memiliki nilai null) maka $null
dikembalikan: fungsi pendekatan ini di / berguna untuk mode ketat , karena, yah, Gonna Catch 'em All.
Saya menemukan pendekatan ini berguna karena memungkinkan PS Custom Objects, normal .NET Objects, PS HashTables, dan koleksi .NET seperti Dictionary untuk diperlakukan sebagai "setara dengan tipe bebek" , yang menurut saya cukup cocok untuk PowerShell.
Tentu saja, ini tidak memenuhi definisi yang ketat tentang "memiliki properti" .. yang mungkin dibatasi secara eksplisit oleh pertanyaan ini. Jika menerima definisi yang lebih besar dari "properti" yang diasumsikan di sini, metode tersebut dapat dimodifikasi secara sederhana untuk mengembalikan boolean.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Contoh:
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"
Dan, perilaku ini mungkin [selalu] tidak diinginkan .. yaitu. tidak mungkin membedakan antara x.Count
dan x["Count"]
.
($object.property -ne $null)
?