Ton*_*ony 1 powershell dictionary
我有一个返回 DictionaryEntry 集合的脚本,我注意到如果该字典恰好只有一个 K/V 对,我必须指定 var.value 与如果它有多个 var.values !是什么赋予了?有没有通用的方法来解决这个问题?在一个命令中?
如果该字典恰好只有一对 K/V 对,我必须指定 var
.value
否:这意味着您正在处理一个孤立的键值对或此类对的(非字典)集合(数组),例如[System.Collections.DictionaryEntry]
实例,它们不属于(单个)字典(哈希表) :
# Single key-value pair
$kvPair = [System.Collections.DictionaryEntry]::new('foo', 42)
$kvPair.Value # -> 42
# Array of key-value pairs
(
[System.Collections.DictionaryEntry]::new('foo', 42),
[System.Collections.DictionaryEntry]::new('bar', 43)
).Value # -> 42, 43
Run Code Online (Sandbox Code Playgroud)
事实上,它甚至适用于键值对的.Value
(类似数组)集合.Value
(即使是该集合的各个元素的属性),这要归功于 PowerShell 的成员访问枚举功能。
相比之下,是字典(哈希表)对象.Values
的类型本机属性。这样的对象包含一个(通常是无序的)具有不同键的键值对的内部集合,属性将其值作为集合返回;使用文字作为示例:.Values
[hashtable]
# Single-entry hashtable.
@{ foo = 42 }.Values # -> @(42) (single-element collection)
# Multi-entry hashtable.
@{ foo = 42; bar = 43 }.Values # -> 42, 43
Run Code Online (Sandbox Code Playgroud)
但请注意,与成员访问枚举不同,该.Values
属性始终返回一个集合,即使该集合恰好只包含一个元素。
PowerShell 将字典/哈希表视为单个对象,这有两个含义:
它被作为一个整体发送到管道。
.GetEnumerator()
显式调用。不应用成员访问枚举,因此.Value
不能用于返回各个条目的.Value
属性值。
.Values
属性,如上所示(或.Keys
,获取键的集合)。