文字列の配列のGetType().Name
を調整すると、Object[]
ではなくString[]
が返されるのはなぜですか?これはどの要素タイプでも発生するようです。たとえば、Import-Csv
はObject[]
を提供しますが、各要素はPSCustomObject
です。
String
の配列の例を次に示します
$x = @('a','b','c')
$x[0].GetType().Name #String
$x.GetType().Name #Object[]
配列のデータ型を明示的に指定していないためです。
たとえば、配列の型は$x[1]
であるため、Object[]
に整数を割り当てると機能します。
配列の構築中にデータ型を指定した場合、後で互換性のない型の値を割り当てることはできません。
C:\PS> [int[]] $myArray = 12,64,8,64,12
C:\PS> $myArray.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32[] System.Array
C:\PS> $myArray[0] = "asd"
Cannot convert value "asd" to type "System.Int32". Error: "Input string was not in a c
orrect format."
At line:1 char:1
+ $myArray[0] = "asd"
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger