次の条件を満たしている場合は、配列型を別の配列型に変換できます。
等しいランク。 2 つの配列のランクは同じである必要があります。つまり、次元の数は同じである必要があります。 ただし、それぞれの寸法の長さは同じである必要はありません。
要素データ型。 両方の配列の要素のデータ型は参照型である必要があります。 少なくとも 1 つの値型が関係しているため、
Integer
配列をLong
配列またはObject
配列に変換することはできません。 詳細については、「 値の型と参照型」を参照してください。兌換性 拡大変換または縮小変換は、2 つの配列の要素型間で可能である必要があります。 この要件に失敗する例は、
String
配列と System.Attributeから派生したクラスの配列の間で試行された変換です。 これら 2 つの型には共通するものがなく、それらの間に任意の種類の変換が存在しません。
配列型間の変換は、それぞれの要素の変換が拡大または縮小されているかどうかに応じて拡大または縮小されます。 詳細については、「 拡大/縮小変換」を参照してください。
オブジェクト配列への変換
初期化せずに 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 でオブジェクトを別の型に変換する
- データ型
- 型変換関数
- 配列
.NET