使用PowerShell在声明时初始化字典

Initialize dictionary at declaration using PowerShell

给定此PowerShell代码:

1
2
3
4
$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")

是否可以直接初始化此字典而不必调用Add方法。就像.NET允许你这样做?

像这样?

1
$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b""bat"}}

[不确定这将涉及哪种类型的语法]


不。Dictionary的初始化语法是C语法糖果。PowerShell对System.Collections.HashTable(@{}有自己的初始值设定项语法支持:

1
$drivers = @{"nitrous"="vx";"directx"="vd";"openGL"="vo"};

对于几乎所有的情况,它都能像Dictionary一样工作。如果您出于某种原因确实需要Dictionary,那么您可以创建一个函数,它接受HashTable并迭代键和值,将它们添加到新的Dictionary中。

无论如何,C初始值设定项语法并不完全是"直接"的。编译器从中生成对Add()的调用。