我可以将名为“keys”的键添加到哈希表而不覆盖“keys”成员吗

2024-01-07

看来我无法将任意键名添加到hashtable如果具有该名称的成员已经存在,则不会覆盖该成员。

我创建一个哈希表($x)并添加两个键,one and 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 member?


在您的示例中,成员属性Keys仍然存在。只是不再可以使用成员访问运算符语法来访问它object.property。您可以通过深入查看该属性PSObject子属性。

$x.PSObject.Members['Keys'].Value

的文档哈希表 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-7考虑财产冲突的情况。对于这些情况的建议是使用hashtable.psbase.Property.

$x.PSBase.Keys

对于碰撞不可预测的情况,可以使用隐藏成员方法get_Keys() as in 这个问题 https://stackoverflow.com/questions/60810458/is-it-correct-to-use-the-get-keys-method-for-collections.

$hash.get_Keys()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将名为“keys”的键添加到哈希表而不覆盖“keys”成员吗 的相关文章

随机推荐