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 下使用哈希表,但我想知道如何通过上述声明创建字典。
我错过了什么?
谢谢
使用的类型名称
System.Collections.Generic.Dictionary[[string],[int]]
包含逗号。通过创建并初始化数组:
要创建并初始化数组,请将多个值分配给 多变的。存储在数组中的值用 分隔 逗号…
因此,您需要转义逗号(阅读 about_Escape_Characters 和 about_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]]'
除了接受的答案之外,还可以使用下面代码块中的语法来初始化字典,其中:
$dictionary = [System.Collections.Generic.Dictionary[string,int]]::new()
...其中
string
和 int
是 .NET 类型。
问题在于 powershell 如何解释你的论点。
当您在字符串中包含逗号时,它现在正在尝试绑定
'System.Collections.Generic.Dictionary[[string]', '[int]]'
到类型为
-TypeName
的 <string[]>
参数或错误消息中的 <System.Object[]>
。 这可以通过正确引用您的参数来解决,以便它与预期的参数绑定 <string>
:
New-Object -TypeName 'System.Collections.Generic.Dictionary[[string], [int]]'
因为我在其他答案中没有看到这个变体,所以这至少适用于 v5+
$dictionary = New-Object 'System.Collections.Generic.Dictionary[string,int]'