Partager via


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

Mise à jour : novembre 2007

Type of '<variablename>' is ambiguous because the loop bounds and the step variable do not widen to the same type

Votre code contient une boucle For...Next dans laquelle le compilateur ne peut pas déduire de type de données pour la variable de contrôle de boucle, car la condition suivante est vraie :

  • 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 la clause d'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, le choix du type pour la variable de contrôle de boucle est donc ambigu.

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

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

La conversion est possible entre Integer et UInteger, et entre UInteger et Integer mais, comme les deux conversions sont restrictives, aucune n'est le meilleur choix.

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

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 pour lequel les autres disposent d'une conversion étendue, par exemple :

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

    For i As Double = m To n 
    

Voir aussi

Concepts

Conversions implicites et explicites

Inférence de type local

Conversions étendues et restrictives

Référence

For...Next, instruction (Visual Basic)

Option Infer, instruction