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

C J*_*son 29 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")
Run Code Online (Sandbox Code Playgroud)

是否可以直接初始化此字典而无需调用Add方法.像.NET一样允许你这样做吗?

像这样的东西?

$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*ant 61

Dictionary<TKey,TValue>.C#syntax candy 的初始化语法.Powershell对System.Collections.HashTable(@{})有自己的初始化语法支持:

$drivers = @{"nitrous"="vx"; "directx"="vd"; "openGL"="vo"};
Run Code Online (Sandbox Code Playgroud)

对于[可能]几乎所有情况,它都可以正常工作Dictionary<TKey,TValue>.如果你真的需要Dictionary<TKey,TValue>某些原因,你可以创建一个函数,它需要一个HashTable并遍历键和值来将它们添加到一个新的Dictionary<TKey,TValue>.


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

  • 值得注意的是,[哈希表和字典确实有差异](/sf/ask/21096001/),但这些差异在很大程度上会被认为是不相关的用于常见的 PowerShell 脚本编写。 (2认同)