配列の変換
更新 : 2007 年 11 月
以下の条件が満たされる場合は、配列型を異なる配列型に変換できます。
ランクが等しいこと。 2 つの配列のランクが同じである、つまり、次元数が同じである必要があります。ただし、それぞれの次元の長さは同じでなくてもかまいません。
要素のデータ型。 両方の配列の要素のデータ型が、参照型である必要があります。整数型 (Integer) の配列を長整数型 (Long) またはオブジェクト型 (Object) の配列には変換できません。これは、少なくとも 1 つの値型が関連するためです。詳細については、「値型と参照型」を参照してください。
変換性。 2 つの配列の要素型の間で、変換 (拡張または縮小) できる必要があります。この要件を満たさない例としては、String 配列と、System.Attribute から派生したクラスの配列との間での変換があります。これらの 2 つの型には共通する点はありません。また、両者の間では変換は行われません。
ある配列型から別の配列型への変換は、それぞれの要素の変換が拡張か縮小かによって、拡大変換または縮小変換になります。詳細については、「拡大変換と縮小変換」を参照してください。
オブジェクト型 (Object) の配列への変換
オブジェクト型 (Object) の配列を初期化せずに宣言すると、初期化されない限り、要素型はオブジェクト型 (Object) のままです。要素型を特定のクラスの配列に設定すると、そのクラスの型になります。ただし、基になる型はオブジェクト型 (Object) のままで、その後要素型を関係のないクラスの別な配列に設定できます。すべてのクラスがオブジェクト型 (Object) から派生するため、配列の要素型を任意のクラスから任意の他のクラスへ変更できます。
次の例では、student 型と String 型の間で変換は行われていませんが、共に Object から派生しているため、すべての代入が有効になります。
' Assume student has already been defined as a class.
Dim testArray() As Object
' testArray is still an Object array at this point.
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
testArray = New student(3) {}
' testArray is now of type student().
testArray = names
' testArray is now a String array.
基になる配列の型
最初に特定のクラスを使用して配列を宣言していた場合、配列の基となる要素型はそのクラスになります。後で要素型を他のクラスの配列に設定する場合は、2 つのクラス間で変換が必要になります。
次の例では、students が student 配列になります。String と student との変換はできないため、最後のステートメントはエラーになります。
Dim students() As student
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
students = New Student(3) {}
' The following statement fails at compile time.
students = names
参照
処理手順
方法 : Visual Basic でオブジェクトを別の型に変換する
概念
Visual Basic での型宣言を省略したプログラミング