Le type pour la variable '<NomVariable>' ne sera pas déduit, car il est lié à un champ d'une portée englobante

Le type de variable '<NomVariable>' n'est pas déduit car il est lié à un champ dans une portée englobante.Modifiez le nom de '<NomVariable>' ou utilisez le nom qualifié complet (par exemple, 'Me.NomVariable' ou 'MyBase.NomVariable').

Une variable de contrôle de boucle dans votre code porte le même nom qu'un champ de la classe ou d'une autre portée englobante. La variable de contrôle étant utilisée sans clause As, elle est liée au champ dans la portée englobante. En outre, le compilateur ne crée pas de nouvelle variable et ne déduit pas son type.

Dans l'exemple suivant, Index, la variable de contrôle de l'instruction For, est liée au champ Index de la classe Customer. Le compilateur ne crée pas de variable pour la variable de contrôle Index ou ne déduit pas son type.

Class Customer

    ' The class has a field named Index.
    Private Index As Integer

    Sub Main()

    ' The following line will raise this warning.
        For Index = 1 To 10
            ' ...
        Next

    End Sub
End Class

Par défaut, ce message est un avertissement. Pour plus d'informations sur le masquage des avertissements ou le traitement des avertissements en tant qu'erreurs, consultez Configuration d'avertissements en Visual Basic.

ID d'erreur : BC42110

Pour traiter cet avertissement

  • Localisez la variable de contrôle de boucle en modifiant son nom par un identificateur qui ne correspond pas non plus au nom d'un champ de la classe.

    For I = 1 To 10
    
  • Précisez que la variable de contrôle de boucle crée une liaison avec le champ de classe en préfixant Me. au nom de variable.

    For Me.Index = 1 To 10
    
  • Au lieu de l'inférence de type local, utilisez une clause As pour spécifier un type pour la variable de contrôle de boucle.

    For Index As Integer = 1 To 10
    

Exemple

Le code suivant affiche l'exemple précédent avec la première correction en place.

Class Customer

    ' The class has a field named Index.
    Private Index As Integer

    Sub Main()

    ' The following line will raise this warning.
        For I = 1 To 10
            ' ...
        Next

    End Sub
End Class

Voir aussi

Tâches

Comment : référencer l'instance actuelle d'un objet (Visual Basic)

Référence

Instruction Option Infer

For Each...Next, instruction (Visual Basic)

For...Next, instruction (Visual Basic)

Concepts

Inférence de type local (Visual Basic)

Me, My, MyBase et MyClass dans Visual Basic