Как создать ArrayList из массива в PowerShell?

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

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

Где $temp - это массив.

Как я могу это достичь?

Ответы

Ответ 1

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

# $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 распаковывает массив, затем мы снова создаем массив с помощью оператора запятой. Я думаю, что это то, что происходит.

Ответ 2

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

[System.Collections.ArrayList]$someArray

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