複写元と複写先の型に互換性がある場合、もしくは型が複写元と複写先がどちらもプリミティブ型で複写が拡大変換となる場合に限り、異なる型の配列へ複写することが出来ます。

例えば、次の例のように、ともにプリミティブ型であり拡大変換となるint型配列からlong型配列への複写は正常に行われます。

Array.Copyメソッドで異なる型の配列へ複写する
Imports System

Class Sample
  Shared Sub Main()
    ' 複写元の配列 (Integer型)
    Dim source() As Integer = {0, 1, 2, 3, 4}

    ' 複写先の配列 (Long型)
    Dim dest(4) As Long

    ' Integer型の配列をLong型の配列に複写
    Array.Copy(source, dest, 5)

    For Each elem As Long In dest
      Console.Write("{0}, ", elem)
    Next
    Console.WriteLine()
  End Sub
End Class
実行結果
0, 1, 2, 3, 4, 

先に挙げた以外の場合、すなわち型に互換性がない、どちらもプリミティブ型でない、型の変換が縮小変換となるのいずれかの場合では、例外ArrayTypeMismatchExceptionがスローされます。

例えば、上記の例を逆にしてlong型配列からint型配列に複写しようとする場合、どちらの型もプリミティブではあってもlongからintへは縮小変換となるため、ArrayTypeMismatchExceptionがスローされます。

型の分類、プリミティブ型については型の種類・サイズ・精度・値域、拡大変換・縮小変換については基本型の型変換で詳しく解説しています。

Buffer.BlockCopyメソッドでは、プリミティブ型であれば縮小変換となるような配列へのコピーも行うことができます。 詳しくはバイト列操作 §.BlockCopyメソッドを参照してください。

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。