web-dev-qa-db-ja.com

PowerShellを使用して宣言時に辞書を初期化する

この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"}}

[これが関与する構文のタイプがわからない]

31
C Johnson

いいえ。_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()への呼び出しを生成します。

58
Joel B Fant