Pytanie Zainicjuj słownik przy deklaracji za pomocą PowerShell


Biorąc pod uwagę ten kod uprawnień:

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

Czy możliwe jest zainicjowanie tego słownika bezpośrednio, bez konieczności wywoływania metody Add. Podobnie jak .NET pozwala ci to zrobić?

Coś takiego?

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

[nie wiesz, jaki rodzaj składni to wymaga]


20
2017-07-20 16:37


pochodzenie




Odpowiedzi:


Nie. Składnia inicjująca dla Dictionary<TKey,TValue> to cukierek składni C #. Powershell ma własną obsługę składni inicjalizatora System.Collections.HashTable (@{}):

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

Dla [prawdopodobnie] prawie wszystkich przypadków będzie działać równie dobrze jak Dictionary<TKey,TValue>. Jeśli naprawdę potrzebujesz Dictionary<TKey,TValue> z jakiegoś powodu można utworzyć funkcję, która wymaga HashTable i iteruje za pomocą klawiszy i wartości, aby dodać je do nowego Dictionary<TKey,TValue>.


Składnia inicjalizatora C # i tak nie jest dokładnie "bezpośrednia". Kompilator generuje połączenia z Add() z tego.


46
2017-07-20 16:56



Naprawdę nie potrzebuję słownika. Tabela mieszania .NET będzie działać dobrze. - C Johnson
Dzięki, to działa świetnie! - C Johnson
Warto to zauważyć a HashTable i Dictionary mają różnice, ale różnice te zostaną w dużej mierze uznane za nieistotne dla typowych skryptów PowerShell. - Bacon Bits