41

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

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

4

2 回答 2

75

不,初始化语法Dictionary<TKey,TValue>是 C# 语法糖果。System.Collections.HashTablePowershell 对( )有自己的初始化语法支持@{}

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

对于 [可能] 几乎所有情况,它都会像Dictionary<TKey,TValue>. 如果Dictionary<TKey,TValue>出于某种原因确实需要,您可以创建一个函数,该函数接受 aHashTable并遍历键和值以将它们添加到新的Dictionary<TKey,TValue>.


无论如何,C# 初始化程序语法并不完全是“直接的”。Add()编译器从中生成调用。

于 2011-07-20T16:56:13.123 回答
1

对于那些真正喜欢使用字典的人。在我的情况下,我不得不使用另一个具有字典作为参数的 c# dll:

New-Object System.Collections.Generic.Dictionary"[String,String]"

这在 2011 年可能是不可能的

于 2021-07-21T12:40:15.367 回答