Answers:
使用$array.Add()-method时,您尝试将元素添加到现有数组中。数组是固定大小的集合,因此您将收到一个错误消息,因为它无法扩展。
$array += $element创建一个具有与旧元素+新项目相同的元素的新数组,而这个新的较大数组替换$array-variable中的旧元素
您可以使用+ =运算符将元素添加到数组。使用Windows PowerShell时,它实际上使用原始数组的值和添加的值创建一个新数组。例如,要将值200的元素添加到$ a变量的数组中,请输入:
$a += 200
资料来源:about_Arrays
+= 这是一项昂贵的操作,因此当您需要添加许多项目时,应尝试以尽可能少的操作添加它们,例如:
$arr = 1..3 #Array
$arr += (4..5) #Combine with another array in a single write-operation
$arr.Count
5
如果不可能,请考虑使用效率更高的集合,例如List或ArrayList(请参见其他答案)。
List或ArrayList。他们会更快。我个人使用+=和排列99%的时间,因为我通常会创建简短的一次性脚本,而多余的秒数并不重要。对于具有大量添加/删除操作的大型脚本,我想在其中进行优化并节省时间,请使用List或ArrayList。
Add()存在该方法吗?
IList。尝试Get-Member -InputObject @()将显示此内容Add Method int IList.Add(System.Object value)
如果要动态调整大小的数组,则应列出一个列表。您不仅将获得.Add()功能,而且正如@ frode-f所解释的,动态数组无论如何都具有更高的内存效率和更好的实践。
而且非常容易使用。
代替您的数组声明,请尝试以下操作:
$outItems = New-Object System.Collections.Generic.List[System.Object]
添加项目很简单。
$outItems.Add(1)
$outItems.Add("hi")
而且,如果您在完成时确实想要一个数组,那么也有一个函数。
$outItems.ToArray()
Add()功能?我可以确认,如果您List如上所述创建通用对象,那么您将拥有一个可变列表,可以使用Add()和Remove()方法分别为其添加和删除项。
(New-Object System.Collections.Generic.List[string]).GetType().Name产量List`1对我来说,符合市场预期; 也许您将其应用于+=包含列表的变量(而不是调用.Add()方法),在这种情况下,变量值确实会转换为数组(System.Object[])。
$a = new-object collections.generic.list[object]