You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell哈希表整数键为何是KeyCollection类型?双向比较结果异常

问题描述

在PowerShell 7.3.6环境中,用户使用整数作为哈希表键,执行操作时出现两个异常现象:

  1. 执行$h.Keys[0].GetType(),返回类型为KeyCollection而非预期的整数类型;
  2. 双向比较结果不一致:1 -eq $h.Keys[0]返回False,$h.Keys[0] -eq 1返回1。

关键命令输出

PS C:\> $h.Keys[0].GetType()    # 预期返回整数类型,实际返回KeyCollection

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
False    False    KeyCollection                            System.Object

PS C:\> 1 -eq $h.Keys[0]        # 双向比较结果不一致
False
PS C:\> $h.Keys[0] -eq 1
1

PS C:\> $PSVersionTable.PSVersion.ToString()
7.3.6

完整复现脚本

$h = @{}
$hi1 = @{1='a';2='b'}   # 创建嵌套哈希表
$h.GetType()            # 确认是哈希表类型
$h.Count                # 初始为空,返回0
$h[1] += @($hi1)        # 向哈希表中添加数组类型的值
$h[1]                   # 查看键1对应的值
$h[1].Count             # 值为数组,返回元素数量1
$h[1].GetType()         # 确认值的类型是数组
$h[1][0]                # 查看数组中的第一个元素
$h[1][0].GetType()      # 确认元素是哈希表

$h.Keys                 # 查看哈希表的所有键(仅包含1)
$h.Keys.GetType()       # 确认Keys属性的类型是KeyCollection
$h.Keys[0]              # 输出显示为1,但实际类型并非整数
$h.Keys[0].GetType()    # 返回KeyCollection类型
1 -eq $h.Keys[0]        # 返回False
$h.Keys[0] -eq 1        # 返回1
问题原因与解释

1. 为什么$h.Keys[0]的类型是KeyCollection而非整数?

哈希表的Keys属性返回的是KeyCollection类型,该集合不支持直接索引访问(未实现[]索引器)。

执行$h.Keys[0]时,PowerShell并没有返回集合中的第一个键,而是直接返回KeyCollection对象本身。你看到输出显示1,是因为PowerShell在输出集合对象时会自动枚举其元素,但变量的实际类型依然是KeyCollection,这就是GetType()返回该类型的原因。

若要正确获取第一个键,需先将KeyCollection转换为数组再访问:

# 两种可行方式
$firstKey = $h.Keys | Select-Object -First 1
$firstKey = @($h.Keys)[0]

2. 为什么双向比较结果不一致?

这是PowerShell中-eq运算符的方向性行为差异导致的:

  • 执行1 -eq $h.Keys[0]时,左边是标量整数1,右边是KeyCollection对象。PowerShell会直接比较标量与集合对象是否相等,两者类型不同,因此返回False。
  • 执行$h.Keys[0] -eq 1时,左边是KeyCollection集合,右边是标量整数1。PowerShell会枚举集合元素并检查匹配,找到值为1的元素后返回该元素,因此输出1(布尔上下文中等价于True)。

内容的提问来源于stack exchange,提问作者lit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:20:59