次の方法で共有


配列変換 (Visual Basic)

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

  • 等しいランク。 2 つの配列のランクは同じである必要があります。つまり、次元の数は同じである必要があります。 ただし、それぞれの寸法の長さは同じである必要はありません。

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

  • 兌換性 拡大変換または縮小変換は、2 つの配列の要素型間で可能である必要があります。 この要件に失敗する例は、 String 配列と System.Attributeから派生したクラスの配列の間で試行された変換です。 これら 2 つの型には共通するものがなく、それらの間に任意の種類の変換が存在しません。

配列型間の変換は、それぞれの要素の変換が拡大または縮小されているかどうかに応じて拡大または縮小されます。 詳細については、「 拡大/縮小変換」を参照してください。

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

初期化せずに 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  

こちらも参照ください