我可以在不覆盖 'keys' 成员的情况下将名为 'keys' 的键添加到哈希表吗
Can I add a key named 'keys' to a hashtable without overriding the 'keys' member
似乎我无法将任意键名添加到 hashtable
而不覆盖具有该名称的成员(如果它已经存在)。
我创建了一个散列 table ($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
Hash Tables 的文档考虑了 属性 碰撞的场景。对于这些情况的建议是使用 hashtable.psbase.Property
.
$x.PSBase.Keys
对于碰撞不可预测的情况,您可以使用隐藏成员方法get_Keys()
,如。
$hash.get_Keys()
似乎我无法将任意键名添加到 hashtable
而不覆盖具有该名称的成员(如果它已经存在)。
我创建了一个散列 table ($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
Hash Tables 的文档考虑了 属性 碰撞的场景。对于这些情况的建议是使用 hashtable.psbase.Property
.
$x.PSBase.Keys
对于碰撞不可预测的情况,您可以使用隐藏成员方法get_Keys()
,如
$hash.get_Keys()