Export (0) Print
Expand All
Expand Minimize

The type for variable '<variablename>' will not be inferred because it is bound to a field in an enclosing scope

The type for variable '<variablename>' will not be inferred because it is bound to a field in an enclosing scope. Either change the name of '<variablename>', or use the fully qualified name (for example, 'Me.variablename' or 'MyBase.variablename').

A loop control variable in your code has the same name as a field of the class or other enclosing scope. Because the control variable is used without an As clause, it is bound to the field in the enclosing scope, and the compiler does not create a new variable for it or infer its type.

In the following example, Index, the control variable in the For statement, is bound to the Index field in the Customer class. The compiler does not create a new variable for the control variable Index or infer its 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

By default, this message is a warning. For information about how to hide warnings or how to treat warnings as errors, see Configuring Warnings in Visual Basic.

Error ID: BC42110

To address this warning

  • Make the loop control variable local by changing its name to an identifier that is not also the name of a field of the class.

    For I = 1 To 10
    
  • Clarify that the loop control variable binds to the class field by prefixing Me. to the variable name.

    For Me.Index = 1 To 10
    
  • Instead of relying on local type inference, use an As clause to specify a type for the loop control variable.

    For Index As Integer = 1 To 10
    

The following code shows the earlier example with the first correction in place.

Class Customer

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

    Sub Main()

        For I = 1 To 10
            ' ...
        Next

    End Sub
End Class
Show:
© 2014 Microsoft