Моя цель - создать пользовательский объект данных, который имеет две дискретные переменные (fooName
и fooUrl
) и список fooChildren
, каждый элемент списка имеет две переменные дискретных переменных childAge
и childName
.
В настоящее время у меня есть это:
$fooCollection = [PSCustomObject] @{fooName=""; fooUrl=""; fooChildrenList=@()}
$fooCollection.fooName = "foo-a-rama"
$fooCollection.fooUrl = "https://1.2.3.4"
$fooChild = New-Object -TypeName PSobject
$fooChild | Add-Member -Name childAge -MemberType NoteProperty -Value 6
$fooChild | Add-Member -Name childName -MemberType NoteProperty -Value "Betsy"
$fooCollection.fooChildrenList += $fooChild
$fooChild = New-Object -TypeName PSobject
$fooChild | Add-Member -Name childAge -MemberType NoteProperty -Value 10
$fooChild | Add-Member -Name childName -MemberType NoteProperty -Value "Rolf"
$fooCollection.fooChildrenList += $fooChild
cls
$fooCollection.fooName
$fooCollection.fooUrl
foreach ($fooChild in $fooCollection.fooChildrenList)
{
(" " + $fooChild.childName + " " + $fooChild.childAge)
}
, который производит следующее.Пока все хорошо
foo-a-rama
https://1.2.3.4
Betsy 6
Rolf 10
Проблема : мне не нравится использовать +=
, потому что, насколько я понимаю, использование +=
приводит к созданию копии $fooCollection.fooChildrenList
(в каком бы состоянии он ни находился) каждый раз, когда выполняется +=
.
Итак, вместо реализации fooChildrenList
как @()
, я хочу реализовать fooChildrenList
как New-Object System.Collections.ArrayList
, чтобы я мог добавить каждыйгрести по мере необходимости.Я пробовал разные способы сделать это в коде, но fooChildrenList
оказывается незаселенным.Например:
$fooCollection = [PSCustomObject] @{fooName=""; fooUrl=""; fooChildrenList = New-Object System.Collections.ArrayList}
$fooCollection.fooName = "foo-a-rama"
$fooCollection.fooUrl = "https://1.2.3.4"
$fooChild.childName = "Betsy"
$fooChild.childAge = 6
$fooCollection.fooChildrenList.Add((New-Object PSObject -Property $fooChild))
$fooChild.childName = "Rolf"
$fooChild.childAge = 10
$fooCollection.fooChildrenList.Add((New-Object PSObject -Property $fooChild))
$fooCollection | get-member
показывает
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
fooChildrenList NoteProperty System.Collections.ArrayList fooChildrenList=
fooName NoteProperty string fooName=foo-a-rama
fooUrl NoteProperty string fooUrl=https://1.2.3.4
$fooCollection
показывает
fooName : foo-a-rama
fooUrl : https://1.2.3.4
fooChildrenList : {}
Как добавить System.Collections.ArrayList кПользовательский объект PowerShell?