在PowerShell中创建新的System.Collections.Generic.Dictionary对象失败

时间:2019-07-02 17:21:49

标签: powershell

PowerShell版本:5.x,6

我正在尝试创建System.Collections.Generic.Dictionary的新对象,但是失败。

我尝试了以下“版本”:

> $dictionary = new-object System.Collections.Generic.Dictionary[[string],[int]]
New-Object : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ComObject'. Specified method is not supported.
At line:1 char:25
+ ... ry = new-object System.Collections.Generic.Dictionary[[string],[int]]
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand

> $dictionary = new-object System.Collections.Generic.Dictionary[string,int]
New-Object : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ComObject'. Specified method is not supported.
At line:1 char:25
+ ... ionary = new-object System.Collections.Generic.Dictionary[string,int]
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand

我知道我可以在PowerShell下使用哈希表,但是我想知道如何通过上述声明创建字典。

我想念什么?

Thx

2 个答案:

答案 0 :(得分:1)

问题在于如何解释您的论点。

当您在字符串中包含逗号时,它现在正在尝试绑定

'System.Collections.Generic.Dictionary[[string]', '[int]]'

输入-TypeName类型的<string[]>参数或错误消息<System.Object[]>中的参数。这可以通过适当地引用您的参数以使其与<string>的预期参数绑定相匹配来解决:

New-Object -TypeName 'System.Collections.Generic.Dictionary[[string], [int]]'

答案 1 :(得分:0)

使用的类型名称System.Collections.Generic.Dictionary[[string],[int]]包含逗号。通过Creating and initializing an array

  

要创建和初始化数组,请将多个值分配给   变量。数组中存储的值用分隔   逗号

因此,您需要转义逗号(请阅读about_Escape_Charactersabout_Quoting_Rules帮助主题)。还有更多选项:

  

在Windows PowerShell中,转义字符为反引号`),   也称为重音符号(ASCII 96)。

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

引号用于指定文字字符串。您可以附上   用单引号')或双引号组成的字符串   ("

$dictionary = new-object "System.Collections.Generic.Dictionary[[string],[int]]"

$dictionary = new-object 'System.Collections.Generic.Dictionary[[string],[int]]'