Powershell 哈希表计数和键属性过载
Powershell Hashtable Count and Keys Properties getting overloaded
问题陈述:Count 和 Keys 属性可能会因散列值而不是 return 它们的预期值而过载。
我的 Powershell 代码是这样的:
$hash = @{}
$hash.one = "Number 1"
$hash.two = "Number 2"
"Count is [{0}]" -f $hash.Count
$hash.Count = "Count's Hash Value"
"Count is now [{0}]" -f $hash.Count
我的输出是这样的:
Count is [2]
Count is now [Count's Hash Value]
Count 属性 过载了!这个问题可能会导致用户很难诊断错误。让我困惑了好一阵子。同样的问题适用于 "Keys" 或者实际上任何 属性.
您对避免这种情况的最佳做法有什么想法吗?也许是不同的 System.Collection?或在所有键前加上一个字符,例如:
$key = ":" + $key
然而,它不是很优雅。即使现在我知道了这个问题,我怀疑我会忘记并再次犯同样的错误。
个人认为是Powershell Language Definition的问题。这 。符号(如 $hash.MyKey)不应被允许用于检索哈希值,只能用于检索 属性 值。只是一个想法。 :-)
感谢您的帮助。
您可以直接调用 属性 get
访问器而不是访问 属性 或使用 Select-Object -ExpandProperty
:
@{Count=123}.get_Count()
@{Count=123}|Select-Object -ExpandProperty Count # does not work on PowerShell Core
在 PowerShell v3+ 中,您还可以使用 PSBase
或 PSObject
自动 属性:
@{Count=123;PSBase=$null}.PSBase.Count
@{Count=123;PSObject=$null}.PSObject.Properties['Count'].Value
问题陈述:Count 和 Keys 属性可能会因散列值而不是 return 它们的预期值而过载。
我的 Powershell 代码是这样的:
$hash = @{}
$hash.one = "Number 1"
$hash.two = "Number 2"
"Count is [{0}]" -f $hash.Count
$hash.Count = "Count's Hash Value"
"Count is now [{0}]" -f $hash.Count
我的输出是这样的:
Count is [2]
Count is now [Count's Hash Value]
Count 属性 过载了!这个问题可能会导致用户很难诊断错误。让我困惑了好一阵子。同样的问题适用于 "Keys" 或者实际上任何 属性.
您对避免这种情况的最佳做法有什么想法吗?也许是不同的 System.Collection?或在所有键前加上一个字符,例如:
$key = ":" + $key
然而,它不是很优雅。即使现在我知道了这个问题,我怀疑我会忘记并再次犯同样的错误。
个人认为是Powershell Language Definition的问题。这 。符号(如 $hash.MyKey)不应被允许用于检索哈希值,只能用于检索 属性 值。只是一个想法。 :-)
感谢您的帮助。
您可以直接调用 属性 get
访问器而不是访问 属性 或使用 Select-Object -ExpandProperty
:
@{Count=123}.get_Count()
@{Count=123}|Select-Object -ExpandProperty Count # does not work on PowerShell Core
在 PowerShell v3+ 中,您还可以使用 PSBase
或 PSObject
自动 属性:
@{Count=123;PSBase=$null}.PSBase.Count
@{Count=123;PSObject=$null}.PSObject.Properties['Count'].Value