web-dev-qa-db-ja.com

Powershellの配列タイプ-System.Object []と特定のタイプの配列

文字列の配列のGetType().Nameを調整すると、Object[]ではなくString[]が返されるのはなぜですか?これはどの要素タイプでも発生するようです。たとえば、Import-CsvObject[]を提供しますが、各要素はPSCustomObjectです。

Stringの配列の例を次に示します

$x = @('a','b','c')

$x[0].GetType().Name #String
$x.GetType().Name #Object[]
10
Backwards_Dave

配列のデータ型を明示的に指定していないためです。

たとえば、配列の型は$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
8
Miroslav Adamec