强类型字典内容

Strong typing dictionary contents

作为从 PS2.0、函数和脚本快速实践到 PS5.0、类 和编程最佳实践的大型 PowerShell 程序重构的一部分,我有到处都在转向强类型,并找到一些提出问题的地方。最新的一个是哈希表。 使用 [Array][Hashtable] 您可以混合使用内容,这使得枚举该集合无法强类型化。对于数组,您可以选择 [String[]] 或使用 [System.Collections.Generic.List[String]] 移动到通用列表。但是字典似乎会带来问题。我找不到创建字典并将其值限制为特定类型的方法。 [System.Collections.Specialized.OrderedDictionary[Int32,Int32]] 之类的东西失败了。 那么,有没有一种方法可以使 Dictionaries 和 OrderedDictionaries 具有强类型的索引、值或两者?如果没有办法,这是否被认为是一个必须克服的问题,或者不是一个问题,如果是,为什么它不是一个问题?

您可以创建泛型字典,但根据 您必须使用反引号来转义泛型类型参数列表中的逗号:

例如

PS> $dict = new-object System.Collections.Generic.Dictionary[int`,string]

请注意,PowerShell 仍会尽力强制转换类型,因此它只会在无法转换类型时抛出异常:

PS> $dict.Add("1", "aaa") # equivalent to $dict.Add(1, "aaa")

而且我不相信 一个开箱即用的通用 OrderedDictionary,这可能就是它失败的原因:-)

PS> new-object System.Collections.Specialized.OrderedDictionary[Int32`,Int32]
New-Object: Cannot find type [System.Collections.Specialized.OrderedDictionary[Int32,Int32]]: verify that the assembly containing this type is loaded.