鉴于此PowerShell代码:
$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")
是否可以直接初始化此字典而无需调用Add方法。像.NET一样允许你这样做吗?
这样的东西?
$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}
[不确定这会涉及什么类型的语法]
答案 0 :(得分:54)
没有。 Dictionary<TKey,TValue>
的初始化语法是C#语法糖果。 Powershell对System.Collections.HashTable
(@{}
)具有自己的初始化语法支持:
$drivers = @{"nitrous"="vx"; "directx"="vd"; "openGL"="vo"};
对于[可能]几乎所有情况,它都会像Dictionary<TKey,TValue>
一样有效。如果由于某种原因确实需要Dictionary<TKey,TValue>
,则可以创建一个带HashTable
的函数,并遍历键和值,将它们添加到新的Dictionary<TKey,TValue>
。
无论如何,C#初始化程序语法并不完全“直接”。编译器从中生成对Add()
的调用。
答案 1 :(得分:0)
对于那些真正喜欢使用字典的人。 就我而言,我不得不使用另一个以字典作为参数的 c# dll:
New-Object System.Collections.Generic.Dictionary"[String,String]"