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

Powershell 添加到数组中的一个元素会导致添加到所有元素,powershell,arraylist,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

我有以下资料:

$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                                                                       

谢谢..

在代码中创建一个对象($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)
}

您通过引用而不是通过值传递。当你编辑一个时,你就编辑了它们。另外,$pa是一个数组列表而不是数组。Reference/Value不能回答这个问题。每个成员都是不同的。我指的是一位特定的成员。当我提到$pa[0]时,我指的不是$pa[1]或任何其他。可能是语法不同。这就是为什么改变一个人就是改变一切。实际上,您已经向arraylist添加了五次一个对象。如果要添加五个不同的对象,请执行此操作:
$pa=New object System.Collections.arraylist;1..5 |%{$p=New Object PSObject-Property@{PIndex=New Object System.Collections.ArrayList};$pa.Add($p)}
谢谢。。。。将按照您的建议执行(我的程序中其他地方的循环中是否有创建新对象实例的类似代码。正在尝试使用$pa=@($p)*5)将其设置为快捷方式):)