为何PowerShell中Hashtable.GetEnumerator()支持Name和Key双属性访问?
为什么PowerShell哈希表枚举器同时有Key和Name属性?
这个现象本质是PowerShell的**扩展类型系统(ETS)**在做兼容适配,核心原因有两点:
统一不同键值对结构的用户体验
PowerShell里不止Hashtable一种键值对结构,比如[ordered]有序字典、注册表项条目、自定义对象的属性枚举等,这些结构大多用Name指代“键”。为了让用户处理不同类型的键值对时,不用记忆不同的属性名,PowerShell给Hashtable的枚举器对象(.NET原生的DictionaryEntry类型)添加了Name作为Key的别名,输出时默认用Name-Value表头,也是为了和其他类似结构的显示风格保持一致。兼顾.NET原生特性与PowerShell使用习惯
Hashtable是.NET框架的原生类型,它的枚举器返回的DictionaryEntry对象本身只有Key和Value属性。但PowerShell的设计更贴近用户使用习惯,Name是PowerShell语境里更常用的“键名”表述,所以通过ETS给DictionaryEntry扩展了Name别名——既保留了.NET原生的Key属性以兼容底层逻辑,又给用户提供了更符合PowerShell使用习惯的属性名。
你测试中Sort-Object用Key和Name都能生效,就是因为这两个属性指向同一个值,属于完全等价的别名关系。
内容的提问来源于stack exchange,提问作者Little Train
相关产品推荐
相关产品推荐

