web-dev-qa-db-fra.com

Initialiser le dictionnaire lors de la déclaration à l'aide de PowerShell

Compte tenu de ce code PowerShell:

$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")

Est-il possible d'initialiser ce dictionnaire directement sans avoir à appeler la méthode Add. Comme .NET vous permet de faire?

Quelque chose comme ça?

$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}

[Je ne sais pas quel type de syntaxe cela impliquerait]

31
C Johnson

Non. La syntaxe d'initialisation pour Dictionary<TKey,TValue> Est un bonbon de syntaxe C #. Powershell a sa propre prise en charge de la syntaxe d'initialisation pour System.Collections.HashTable (@{}):

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

Pour [probablement] presque tous les cas, cela fonctionnera aussi bien que Dictionary<TKey,TValue>. Si vous avez vraiment besoin de Dictionary<TKey,TValue> Pour une raison quelconque, vous pouvez créer une fonction qui prend un HashTable et parcourt les clés et les valeurs pour les ajouter à un nouveau Dictionary<TKey,TValue>.


La syntaxe d'initialisation C # n'est pas exactement "directe" de toute façon. Le compilateur génère des appels à Add() à partir de celui-ci.

58
Joel B Fant