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

时间:2011-07-20 16:37:45

标签: powershell dictionary initialization

鉴于此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"}}

[不确定这会涉及什么类型的语法]

2 个答案:

答案 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]"