コンピュータや音楽の事書いてます

Powershell class, インスタンス, List 不思議な挙動

Aというクラスがあるとして

class A {
	[string]$s1
}

.Net のList型を用意

using namespace System.Collections.Generic
$alist = New-Object List[A]

状態を見ると、List型にはAddというメソッドがあり、 A型を1つ入れられることが分かる。
$alist.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     List`1                                   System.Object

$alist.Add

OverloadDefinitions
-------------------
void Add(A item)
void ICollection[A].Add(A item)
int IList.Add(System.Object value)

1つ入れてみる
$alist.Add( [A]::new())

型はもちろんそのまま
$alist.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     List`1                                   System.Object

個数は当然 1
$alist.Count

1

ここから本題。
powershellの配列には +=演算子(要素追加) がある。それを使ってみる。
$alist += New-Object A
$alist.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

形がObject[]に変わってしまった!しかし個数は正しいw
$alist.Count

2

List型にはその演算子はありません!って言ってほしい。