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



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

我创建一个哈希表($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

哈希表的文档考虑了属性冲突的方案。对于这些情况,建议使用hashtable.psbase.Property.

$x.PSBase.Keys

对于冲突不可预测的情况,可以使用隐藏成员方法get_Keys(),如本问题所示。

$hash.get_Keys()

最新更新