Conversion des tableaux (Visual Basic)

Vous pouvez convertir un type de tableau en un autre type de tableau si les conditions suivantes sont remplies :

  • Rang égal. Les rangs des deux tableaux doivent être identiques, c’est-à-dire qu’ils doivent avoir le même nombre de dimensions. Toutefois, les longueurs des dimensions respectives n’ont pas besoin d’être identiques.

  • Type de données d’élément. Les types de données des deux tableaux doivent être des types de référence. Vous ne pouvez pas convertir un tableau Integer en tableau Long, ou même en tableau Object, car au moins un type valeur est impliqué. Pour plus d'informations, consultez Value Types and Reference Types.

  • Convertibilité. Une conversion, soit étendue, soit restrictive, doit être possible entre les types d'éléments des deux tableaux. Une tentative de conversion entre un tableau String et un tableau d'une classe dérivée de System.Attribute est un exemple qui ne répond pas à cette exigence. Ces deux genres n’ont rien en commun et aucune conversion n’existe entre eux.

Une conversion d’un type de tableau en un autre est étendue ou restrictive selon que la conversion des éléments respectifs est étendue ou restrictive. Pour plus d’informations, consultez Widening and Narrowing Conversions.

Conversion en tableau d’objets

Lorsque vous déclarez un tableau Object sans l’initialiser, son type d’élément est Object tant qu'il n'est pas initialisé. Lorsque vous le définissez sur un tableau d’une classe spécifique, il prend le type de cette classe. Toutefois, son type sous-jacent est toujours Object, et vous pouvez ensuite le définir sur un autre tableau d’une classe non liée. Étant donné que toutes les classes dérivent de Object, vous pouvez modifier le type d’élément du tableau de n’importe quelle classe en n’importe quelle autre classe.

Dans l’exemple suivant, aucune conversion n’existe entre les types student et String, mais les deux dérivent de Object, de sorte que toutes les assignations sont valides.

' 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.  

Type sous-jacent d’un tableau

Si vous déclarez à l'origine un tableau avec une classe spécifique, son type d'élément sous-jacent est cette classe. Si vous l’avez ensuite défini sur un tableau d’une autre classe, il doit y avoir une conversion entre les deux classes.

Dans l’exemple suivant, students est un tableau student. Étant donné qu’aucune conversion n’existe entre String et student, la dernière instruction échoue.

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  

Voir aussi