我有一个数组中的文件列表。我想枚举这些文件,并从中删除特定文件。显然我无法从数组中删除项目,因此我想使用ArrayList
。
但以下内容对我不起作用:
$temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($temp)
其中$temp
是数组。
我怎样才能做到这一点?
答案 0 :(得分:34)
我也无法使用该构造函数。然而,这似乎有效:
# $temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($null)
$resourceFiles.AddRange($temp)
您还可以在构造函数中传递一个整数来设置初始容量。
当您说要枚举文件时,您的意思是什么?为什么不能将想要的值过滤成新数组呢?
修改强>
似乎你可以像这样使用数组构造函数:
$resourceFiles = New-Object System.Collections.ArrayList(,$someArray)
请注意逗号。我相信正在发生的事情是,当您调用.NET方法时,您始终将参数作为数组传递。 PowerShell解压缩该数组并将其作为单独的参数传递给方法。在这种情况下,我们不希望PowerShell解压缩数组;我们想将数组作为一个单元传递。现在,逗号运算符创建数组。所以PowerShell解压缩数组,然后我们用逗号运算符再次创建数组。我认为这是正在发生的事情。
答案 1 :(得分:23)
可能是最短的版本:
[System.Collections.ArrayList]$someArray
它也更快,因为它不会调用相对昂贵的New-Object
。