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
Asclause 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