Tôi đã sử dụng phần sau để trả về giá trị thuộc tính, vì nó sẽ được truy cập thông qua$thing.$prop
, nếu "thuộc tính" sẽ tồn tại và không ném ra một ngoại lệ ngẫu nhiên. Nếu thuộc tính "không tồn tại" (hoặc có giá trị null) thì $null
được trả về: phương pháp này hoạt động trong / hữu ích cho chế độ nghiêm ngặt , bởi vì, sẽ bắt được tất cả.
Tôi thấy cách tiếp cận này hữu ích vì nó cho phép Đối tượng tùy chỉnh PS, đối tượng .NET bình thường, PS HashTables và bộ sưu tập .NET như Từ điển được coi là "tương đương kiểu vịt" , mà tôi thấy là khá phù hợp với PowerShell.
Tất nhiên, điều này không đáp ứng định nghĩa chặt chẽ của "có một thuộc tính" .. mà câu hỏi này có thể được giới hạn rõ ràng. Nếu chấp nhận định nghĩa lớn hơn của "property" được giả định ở đây, phương thức có thể được sửa đổi nhỏ để trả về boolean.
Function Get-PropOrNull {
param($thing, [string]$prop)
Try {
$thing.$prop
} Catch {
}
}
Ví dụ:
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"
Và, hành vi này có thể không [luôn] được mong muốn .. tức là. không thể phân biệt giữa x.Count
và x["Count"]
.
($object.property -ne $null)
?