Не удалось создать новый объект System.Collections.Generic.Dictionary в PowerShell - PullRequest
0 голосов
/ 02 июля 2019

Версия PowerShell: 5.x, 6

Я пытаюсь создать новый объект System.Collections.Generic.Dictionary, но это не удается.

Я попробовал следующие "версии":

> $dictionary = new-object System.Collections.Generic.Dictionary[[string],[int]]
New-Object : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ComObject'. Specified method is not supported.
At line:1 char:25
+ ... ry = new-object System.Collections.Generic.Dictionary[[string],[int]]
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand

> $dictionary = new-object System.Collections.Generic.Dictionary[string,int]
New-Object : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'ComObject'. Specified method is not supported.
At line:1 char:25
+ ... ionary = new-object System.Collections.Generic.Dictionary[string,int]
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand

Я знаю, что могу использовать хеш-таблицу под PowerShell, но я хочу знать, как создать словарь с помощью вышеуказанного объявления.

Чего мне не хватает?

Thx

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Проблема в том, как интерпретирует ваш аргумент.

Когда вы добавляете запятую в строку, она пытается связать

'System.Collections.Generic.Dictionary[[string]', '[int]]'
От

до -TypeName типа <string[]> или в сообщении об ошибке <System.Object[]>. Эту проблему можно решить путем правильного цитирования аргумента, чтобы он соответствовал ожидаемой привязке параметра <string>:

New-Object -TypeName 'System.Collections.Generic.Dictionary[[string], [int]]'
0 голосов
/ 02 июля 2019

Используемое имя типа System.Collections.Generic.Dictionary[[string],[int]] содержит запятую.По Создание и инициализация массива :

Чтобы создать и инициализировать массив, присвойте переменной несколько значений.В массиве хранятся значения , разделенные запятой

Следовательно, вам нужно экранировать запятую (прочитайте about_Escape_Characters и about_Quoting_Rules разделы справки).Существуют и другие параметры:

В Windows PowerShell escape-символом является backtick (`), также называемый серьезным акцентом (ASCII 96).

$dictionary = new-object System.Collections.Generic.Dictionary[[string]`,[int]]

Кавычки используются для указания литеральной строки.Вы можете заключить строку в одинарные кавычки (') или двойные кавычки (").

$dictionary = new-object "System.Collections.Generic.Dictionary[[string],[int]]"

или

$dictionary = new-object 'System.Collections.Generic.Dictionary[[string],[int]]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...