当前位置:  开发笔记 > 编程语言 > 正文

PowerShell通用集合

如何解决《PowerShell通用集合》经验,为你挑选了2个好方法。

我一直在推动PowerShell中的.NET框架,我遇到了一些我不理解的东西.这很好用:

$foo = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
$foo.Add("FOO", "BAR")
$foo

Key                                                         Value
---                                                         -----
FOO                                                         BAR

然而,这不是:

$bar = New-Object "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"
New-Object : Cannot find type [System.Collections.Generic.SortedDictionary`2[System.String,System.String]]: make sure t
he assembly containing this type is loaded.
At line:1 char:18
+ $bar = New-Object <<<< "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"

他们都在同一个集会,所以我错过了什么?

正如答案中指出的那样,这只是PowerShell v1的一个问题.



1> 小智..:

在PowerShell 2.0中,创建a的新方法Dictionary是:

$object = New-Object 'system.collections.generic.dictionary[string,int]'


确实,这是一个更好的答案.**如果**用户在v2上.关于v1,问了一个问题.世界上仍有很多人也在v1上.

2> tomasr..:

字典未在与SortedDictionary 相同的程序集中定义.一个在mscorlib中,另一个在system.dll中.

这就是问题所在.PowerShell中的当前行为是,在解析指定的泛型参数时,如果类型不是完全限定的类型名称,则它假定它们与您尝试实例化的泛型类型位于同一程序集中.

在这种情况下,这意味着它在System.dll中寻找System.String,而不是在mscorlib中,因此它失败了.

解决方案是为通用参数类型指定完全限定的程序集名称.这非常难看,但有效:

$bar = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有