ฉันใช้สิ่งต่อไปนี้ซึ่งส่งคืนค่าคุณสมบัติเนื่องจากจะเข้าถึงผ่านทาง$thing.$prop
หาก "คุณสมบัติ" จะมีอยู่จริงและไม่เกิดข้อยกเว้นแบบสุ่ม หากคุณสมบัติ "ไม่มีอยู่" (หรือมีค่าว่าง) $null
จะถูกส่งกลับ: วิธีการนี้ทำหน้าที่ใน / มีประโยชน์สำหรับโหมดที่เข้มงวดเพราะงั้นก็จะจับพวกเขาทั้งหมด
ผมพบว่าวิธีนี้มีประโยชน์เพราะจะช่วยให้วัตถุที่กำหนดเอง PS วัตถุ .NET ปกติ PS HashTables และ .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)
เหรอ?