PowerShell Array.Add vs + =
我在PowerShell数组中发现了一些有趣的行为,即如果我声明一个数组为:
$array = @()
然后尝试使用$array.Add("item")
方法将项目添加到它,我收到以下错误:
Exception calling "Add" with "1" argument(s): "Collection was of a fixed size."
但是,如果我使用$array += "item"
追加项目,该项目被接受没有问题,“固定大小”的限制似乎并不适用。
为什么是这样?
当你使用$array.Add()
方法时,你试图将元素添加到数组中。 一个数组是一个固定大小的集合,所以你会收到一个错误。
当你使用$array += $element
,PS会创build一个NEW数组,其元素与$array
+所添加的元素相同,然后覆盖原来的元素。 你看到了不同? 第一种方法试图修改/扩展原始数组,而这种方法只是将所有的元素复制到一个新的温度。 数组,并覆盖$array
-variable中的旧$array
。
您可以使用+ =运算符将一个元素添加到数组中。 当您使用它时,Windows PowerShell实际上将使用原始数组的值和添加的值创build一个新数组。 例如,要将值为200的元素添加到$ avariables中的数组中,请键入:
$a += 200
来源: about_Arrays
如果你想要一个dynamic大小的数组,那么你应该做一个列表。 不仅会得到.Add()
function,但是正如@ frode-f所解释的那样,它更有记忆效率,更好的做法。
而且使用起来非常简单。
而不是你的数组声明,试试这个:
$outItems = New-Object System.Collections.Generic.List[System.Object]
添加项目很简单。
$outItems.Add(1) $outItems.Add("hi")
如果你真的想要一个数组,那么也有一个function。
$outItems.ToArray()