Добавление к одному элементу в массиве приводит к добавлению ко всем элементам - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующее:

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

Я хочу, чтобы массив $ pa (содержащий объект $ p) имел фиксированный размер. Пока все выглядит хорошо. Но когда я добавляю элементы в PIndex одного члена массива $ pa, он добавляет те же элементы ко всем остальным членам $ 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

И так далее. Просто хочу добавить элементы в массив PIndex $ pa [0]. Почему это также добавляет к другим членам? Я пропускаю синтаксис?

Тип выглядит отлично:

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

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

Спасибо ..

1 Ответ

0 голосов
/ 26 июня 2018

В своем коде вы создаете один объект ($ p), а затем назначаете этот один объект пяти различным позициям в массиве.Если вам нужно пять разных объектов, вам нужно создать пять разных объектов:

$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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...