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>何らかの理由で本当に必要な場合は、を取りHashTable、キーと値を反復処理して新しいに追加する関数を作成できますDictionary<TKey,TValue>


とにかく、C#初期化構文は正確に「直接」ではありません。コンパイラーは、そこからへの呼び出しを生成しますAdd()

于 2011-07-20T16:56:13.123 に答える