我可以在不覆盖 'keys' 成员的情况下将名为 'keys' 的键添加到哈希表吗

Can I add a key named 'keys' to a hashtable without overriding the 'keys' member

似乎我无法将任意键名添加到 hashtable 而不覆盖具有该名称的成员(如果它已经存在)。

我创建了一个散列 table ($x) 并添加了两个键,onetwo:

$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()