Lire en anglais

Partager via


Le type de « <nom_variable> » est ambigu, car les limites de la boucle et la clause d’incrémentation ne sont pas converties en un même type

Votre code contient une boucle For...Next dans laquelle le compilateur ne peut pas déduire un type de données pour la variable de contrôle de boucle, car les conditions suivantes sont remplies :

  • Le type de données de la variable de contrôle de boucle n’est pas spécifié avec une clause As .

  • Les limites de la boucle et l’incrémentation contiennent au moins deux types de données.

  • Il existe plusieurs conversions possibles entre les types de données.

  • Il n’existe aucun meilleur type parmi les candidats, si bien que le choix du type pour la variable de contrôle de boucle est ambigu.

Par exemple, la boucle suivante a une limite de boucle de type Integer et une autre de type UInteger:

VB
Dim m As Integer = 1  
Dim n As UInteger = 10  
' Not valid.  
' For i = m To n  
    ' Loop processing.  
' Next  

Il existe une conversion possible entre Integer et UInteger, et une conversion possible entre UInteger et Integer, mais les deux sont des conversions restrictives, donc aucune ne constitue le meilleur choix.

Dans l’exemple suivant, une troisième variable de type Double est ajoutée. Integer et UInteger ont des conversions étendues standard en Double, ce qui fait de la conversion en Double le meilleur choix. L’inférence de type assigne à la variable de contrôle de boucle i le type de données Double.

VB
Dim stepVar As Double = 1  
' Valid.  
For i = m To n Step stepVar  
    ' Loop processing.  
Next  

ID d’erreur : BC30983

Pour corriger cette erreur

  • Convertissez explicitement l’une des variables en un type vers lequel les autres ont une conversion étendue, par exemple :

    VB
    For i = m To CLng(n)  
    
  • Utilisez une clause As pour spécifier le type de la variable de contrôle :

    VB
    For i As Double = m To n
    

Voir aussi