The type for variable '<variablename>' will not be inferred because it is bound to a field in an enclosing scope
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() ' The following line will raise this warning. For I = 1 To 10 ' ... Next End Sub End Class