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

为何PowerShell中Hashtable.GetEnumerator()支持Name和Key双属性访问?

为什么PowerShell哈希表枚举器同时有Key和Name属性?

这个现象本质是PowerShell的**扩展类型系统(ETS)**在做兼容适配,核心原因有两点:

  1. 统一不同键值对结构的用户体验
    PowerShell里不止Hashtable一种键值对结构,比如[ordered]有序字典、注册表项条目、自定义对象的属性枚举等,这些结构大多用Name指代“键”。为了让用户处理不同类型的键值对时,不用记忆不同的属性名,PowerShell给Hashtable的枚举器对象(.NET原生的DictionaryEntry类型)添加了Name作为Key的别名,输出时默认用Name-Value表头,也是为了和其他类似结构的显示风格保持一致。

  2. 兼顾.NET原生特性与PowerShell使用习惯
    Hashtable是.NET框架的原生类型,它的枚举器返回的DictionaryEntry对象本身只有Key和Value属性。但PowerShell的设计更贴近用户使用习惯,Name是PowerShell语境里更常用的“键名”表述,所以通过ETS给DictionaryEntry扩展了Name别名——既保留了.NET原生的Key属性以兼容底层逻辑,又给用户提供了更符合PowerShell使用习惯的属性名。

你测试中Sort-Object用Key和Name都能生效,就是因为这两个属性指向同一个值,属于完全等价的别名关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:59:10