添加到数组中的一个元素会导致添加到所有元素

时间:2018-06-25 19:20:50

标签: powershell arraylist

我有以下内容:

$p = New-Object PSObject -Property @{PIndex = New-Object System.Collections.ArrayList}
[System.Collections.ArrayList]$pa = @($p) * 5

我希望数组$ pa(包含$ p对象)具有固定大小。到目前为止,一切看起来都不错。但是,当我将元素添加到数组$ pa的一个成员的PIndex中时,它将相同的元素添加到$ pa的所有其他成员中。 所以,我这样做:

$pa[0].PIndex.Add(2)

让我们检查一下:

PS C:\Users> $pa[0].PIndex
2
PS C:\Users> $pa[1].PIndex
2
PS C:\Users> $pa[2].PIndex
2

以此类推。只是想向$ pa [0]的PIndex数组添加元素。为什么还要增加其他成员?我是否缺少语法?

类型看起来不错:

PS C:\Users> $pa.GetType()

IsPublic IsSerial Name                                     BaseType                                                                            
-------- -------- ----                                     --------                                                                            
True     True     ArrayList                                System.Object                                                                       

谢谢..

1 个答案:

答案 0 :(得分:1)

在代码中,创建一个对象($ p),然后将该一个对象分配给arraylist中的五个不同位置。如果需要五个不同的对象,则需要创建五个不同的对象:

$pa = New-Object System.Collections.ArrayList
for($i=1;$i -le 5;$i++){
    $p = New-Object PSObject -Property @{PIndex = New-Object System.Collections.ArrayList}
    $pa.Add($p)
}