配列の変換 (Visual Basic)

次の条件を満たす場合は、配列型を別の配列型に変換できます。

  • ランクが同じ。 2 つの配列のランクは同じであることが必要です。つまり、含まれる次元の数が同じである必要があります。 ただし、それぞれの次元の長さは同じでなくてもかまいません。

  • 要素のデータ型。 両方の配列の要素のデータ型は、参照型である必要があります。 Integer 配列を Long 配列、あるいは Object 配列に変換することはできません。これは、少なくとも 1 つの値型が関係するためです。 詳細については、「 Value Types and Reference Types」を参照してください。

  • 互換性。 2 つの配列の要素型の間で、変換 (拡大または縮小) を実行できる必要があります。 たとえば、String 配列と System.Attribute から派生したクラスの配列との間での変換を試行した場合は、この要件が満たされません。 これらの 2 つの型には共通点がなく、これらの間ではどのような種類の変換も行われません。

ある配列型から別の配列型への変換が、拡大と縮小のどちらであるかは、それぞれの要素の変換が拡大であるか縮小であるかに応じて決まります。 詳細については、「 Widening and Narrowing Conversions」を参照してください。

オブジェクト配列への変換

初期化せずに Object 配列を宣言すると、初期化されない限り、その要素の型は Object です。 これを特定のクラスの配列に設定すると、そのクラスの型を引き継ぎます。 ただし、基になる型はまだ Object であり、その後、関連しないクラスの別の配列に設定できます。 すべてのクラスは Object から派生するため、配列の要素型はどのクラスでも別のクラスに変更できます。

次の例では studentString 型の間に変換は存在しませんが、両方とも 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 つのクラス間の変換が必要です。

次の例では、studentsstudent 配列です。 Stringstudent の間に変換が存在しないため、最後のステートメントは失敗します。

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  

関連項目