Инициализировать словарь при объявлении с помощью PowerShell - PullRequest
23 голосов
/ 20 июля 2011

Учитывая этот код 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"}}

[не уверен, какой тип синтаксиса это будет включать]

1 Ответ

55 голосов
/ 20 июля 2011

Нет. Синтаксис инициализации для Dictionary<TKey,TValue> - это синтаксис C # candy. Powershell имеет собственную поддержку синтаксиса инициализатора для System.Collections.HashTable (@{}):

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

Для [вероятно] почти всех случаев это будет работать так же хорошо, как и Dictionary<TKey,TValue>. Если вам действительно нужен Dictionary<TKey,TValue> по какой-то причине, вы можете создать функцию, которая принимает HashTable и перебирает ключи и значения, чтобы добавить их в новый Dictionary<TKey,TValue>.


Синтаксис инициализатора C # в любом случае не совсем "прямой". Компилятор генерирует вызовы Add() из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...