Как создать ArrayList из массива в PowerShell? - PullRequest
18 голосов
/ 06 марта 2009

У меня есть список файлов в массиве. Я хочу перечислить эти файлы и удалить определенные файлы из него. Очевидно, я не могу удалить элементы из массива, поэтому я хочу использовать ArrayList. Но следующее не работает для меня:

$temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($temp)

Где $temp - Массив.

Как мне этого добиться?

Ответы [ 2 ]

34 голосов
/ 06 марта 2009

Я тоже не могу заставить этот конструктор работать. Однако это похоже на работу:

# $temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($null)
$resourceFiles.AddRange($temp)

Вы также можете передать целое число в конструкторе, чтобы установить начальную емкость.

Что вы имеете в виду, когда говорите, что хотите перечислить файлы? Почему вы не можете просто отфильтровать нужные значения в новый массив?

Edit:

Кажется, вы можете использовать конструктор массива так:

$resourceFiles = New-Object System.Collections.ArrayList(,$someArray)

Обратите внимание на запятую. Я верю, что когда вы вызываете метод .NET, вы всегда передаете параметры в виде массива. PowerShell распаковывает этот массив и передает его методу в виде отдельных параметров. В этом случае мы не хотим, чтобы PowerShell распаковывал массив; мы хотим передать массив как единое целое. Теперь оператор запятой создает массивы. Таким образом, PowerShell распаковывает массив, затем мы снова создаем массив с помощью оператора запятой. Я думаю, что это то, что происходит.

24 голосов
/ 16 августа 2011

Вероятно, самая короткая версия:

[System.Collections.ArrayList]$someArray

Это также быстрее, потому что это не вызывает относительно дорого New-Object.

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