似乎我无法在不覆盖具有该名称的成员(如果它已经存在)的情况下向hashtable
添加任意键名。
我创建一个哈希表($x
)并添加两个键,one
和two
:
$x = @{}
$x['one'] = 1
$x['two'] = 2
然后通过评估$x.Keys
来显示添加的键:
$x.Keys
这将打印:
one
two
如果我添加另一个名为keys
的键,它会覆盖已经存在的成员:
$x['Keys'] = 42
$x.Keys
现在打印:
42
我不确定我是否觉得这种行为是可取的。我原以为$x.keys
打印键名,$x['keys']
打印42
。
是否可以以某种方式添加名为Keys
的键而不覆盖Keys
成员?
在您的示例中,成员属性Keys
仍然存在。只是不再使用成员访问运算符语法object.property
访问它。可以通过向下钻取到PSObject
子属性来查看属性。
$x.PSObject.Members['Keys'].Value
哈希表的文档考虑了属性冲突的方案。对于这些情况,建议使用hashtable.psbase.Property
.
$x.PSBase.Keys
对于冲突不可预测的情况,可以使用隐藏成员方法get_Keys()
,如本问题所示。
$hash.get_Keys()