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()