在PowerShell中,如何检查一个变量是否为哈希表(无论是否有序)?
在第一种情况下,我正在测试有序哈希表是否为
随后,我使用
最后,我尝试测试有序哈希表是否为
我认为一定有方法来实现这个功能。
检查仅是否为
检查
在第一种情况下,我正在测试有序哈希表是否为
Hashtable
类型,但它似乎不是。随后,我使用
GetType()
检查变量类型。这似乎表明有序哈希表的类型为OrderedDictionary
。最后,我尝试测试有序哈希表是否为
OrderedDictionary
类型,但结果出现错误。我认为一定有方法来实现这个功能。
检查仅是否为
Hashtable
:$standard = @{}
$ordered = [ordered]@{}
if ($standard -is [Hashtable]) { Write-Output "True" } else { Write-Output "False" }
if ($ordered -is [Hashtable]) { Write-Output "True" } else { Write-Output "False" }
真
假
获取普通和有序哈希表的变量类型
查看变量类型,我发现$ordered
似乎是一种名为OrderedDictionary
的不同类型。
$standard = @{}
$ordered = [ordered]@{}
Write-Output $standard.GetType()
Write-Output $ordered.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
True True OrderedDictionary System.Object
检查 Hashtable
或 OrderedDictionary
但是,当我检查一个变量是否为 OrderedDictionary
类型时,会提示找不到该类型的错误。
$standard = @{}
$ordered = [ordered]@{}
if (($standard -is [Hashtable]) -or ($standard -is [OrderedDictionary])) { Write-Output "True" } else { Write-Output "False" }
if (($ordered -is [Hashtable]) -or ($ordered -is [OrderedDictionary])) { Write-Output "True" } else { Write-Output "False" }
True
无法找到类型 [OrderedDictionary]。
[System.Collections.Specialized.OrderedDictionary]
。如果你只输入[OrderedDictionary]
并在括号内按Tab键,PowerShell控制台会为你提供自动完成功能。由于System
是可选的,因此你可以稍微缩短为[Collections.Specialized.OrderedDictionary]
,但不能再更短。(至少我不知道还有什么更短的方式;Hashtable
似乎会得到特殊处理。) - Jeroen Mostert-is [System.Collections.IDictionary]
,因为它可以包含这两个类型以及你可以以相同方式访问的任何其他类型。 - Jeroen Mostertusing namespace System.Collections.Specialized
,我确实可以将其使用缩短为[OrderedDictionary]
。 - David Gardusing namespace
。太好了,我不知道这个功能。 :-) - Jeroen Mostert