Объект PowerShell [] в коллекцию .Net? - PullRequest
2 голосов
/ 23 марта 2012

В следующих инструкциях Powershell, зачем мне нужна запятая для создания списка массивов .Net или стека из объекта Powershell []?

$list = "A","B","C"
$stack = New-Object System.Collections.Stack(,$list)

Зачем мне это и что означает запятая?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

запятая - это оператор массива в PowerShell.

Проблема в том, что PowerShell разворачивает ваш массив в аргументы для перегрузки.Добавление запятой сохраняет ее в виде массива.

Без запятой вы получаете эту ошибку:

New-Object : Cannot find an overload for "Stack" and the argument count: "3".

С Windows PowerShell в действии (второе издание):оператор запятой всегда переносит значение аргумента в новый одноэлементный массив.

3 голосов
/ 23 марта 2012

Если вы попытаетесь передать $list непосредственно в конструктор, вы получите эту ошибку:

PS C:\Users\Svick> New-Object System.Collections.Stack $list
New-Object : Cannot find an overload for "Stack" and the argument count: "3".

Я думаю, это объясняет, что происходит: PowerShell рассматривает каждый элемент в массиве как аргумент для конструктора. Если вы хотите поместить их все в один параметр, вам нужно заключить массив в другой массив.

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