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

问题描述 投票:0回答:4

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 下使用哈希表,但我想知道如何通过上述声明创建字典。

我错过了什么?

谢谢

powershell
4个回答
8
投票

使用的类型名称

System.Collections.Generic.Dictionary[[string],[int]]
包含逗号。通过创建并初始化数组

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

因此,您需要转义逗号(阅读 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]]'

6
投票

除了接受的答案之外,还可以使用下面代码块中的语法来初始化字典,其中:

  • 无需转义任何字符
  • 更干净(在我看来)
  • 为您提供智能感知(在 PowerShell 和 PowerShell ISE 中测试)
$dictionary = [System.Collections.Generic.Dictionary[string,int]]::new()

...其中

string
int
是 .NET 类型。


3
投票

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

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

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

到类型为

-TypeName
<string[]>
参数或错误消息中的
<System.Object[]>
。 这可以通过正确引用您的参数来解决,以便它与预期的参数绑定
<string>
:

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

0
投票

因为我在其他答案中没有看到这个变体,所以这至少适用于 v5+

$dictionary = New-Object 'System.Collections.Generic.Dictionary[string,int]'

© www.soinside.com 2019 - 2024. All rights reserved.