この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"}}
[これが関与する構文のタイプがわからない]
いいえ。_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()
への呼び出しを生成します。