Conversioni di matrici (Visual Basic)
È possibile convertire un tipo di matrice in un tipo di matrice diverso, purché vengano soddisfatte le condizioni seguenti:
Uguale classificazione. Le classificazioni delle due matrici devono essere uguali, ovvero devono avere lo stesso numero di dimensioni. Non è tuttavia necessario che le lunghezze delle rispettive dimensioni siano uguali.
Tipo di dati degli elementi. I tipi di dati degli elementi di entrambe le matrici devono essere tipi riferimento. Non è possibile convertire una matrice
Integer
in una matriceLong
o persino in una matriceObject
, perché è coinvolto almeno un tipo valore. Per altre informazioni, vedere Value Types and Reference Types.Convertibilità. Deve essere possibile una conversione, che supporta un maggior o un minor numero di dati, tra i tipi di elemento delle due matrici. Un esempio in cui tale requisito non viene soddisfatto riguarda un tentativo di conversione tra una matrice
String
e una matrice di una classe derivata da System.Attribute. Questi due tipi non hanno nulla in comune e non esiste tra loro alcuna conversione di alcun tipo.
Una conversione di un tipo di matrice in un'altra supporta un maggior o un minor numero di dati a seconda che la conversione dei rispettivi elementi supporti un maggior o un minor numero di dati. Per altre informazioni, vedere Widening and Narrowing Conversions.
Conversione in una matrice Object
Quando si dichiara una matrice Object
senza inizializzarla, il relativo tipo di elemento è Object
finché rimane non inizializzato. Quando viene impostato su una matrice di una classe specifica, assume il tipo di tale classe. Tuttavia, il tipo sottostante è ancora Object
ed è possibile impostarlo in seguito su un'altra matrice di una classe non correlata. Poiché tutte le classi derivano da Object
, è possibile modificare il tipo di elemento della matrice da qualsiasi classe a qualsiasi altra classe.
Nell'esempio seguente non esiste alcuna conversione tra tipi student
e String
, ma entrambi derivano da Object
, quindi tutte le assegnazioni sono valide.
' 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.
Tipo sottostante di una matrice
Se in origine si dichiara una matrice con una classe specifica, il tipo di elemento sottostante è tale classe. Se successivamente viene impostato su una matrice di un'altra classe, è necessario eseguire una conversione tra le due classi.
Nell'esempio seguente students
è una matrice student
. Poiché non esiste alcuna conversione tra String
e student
, l'ultima istruzione non riesce.
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