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 matrice Long o persino in una matrice Object, 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  

Vedi anche