Поделиться через


Тип для переменной <имяПеременной> не будет определен, так как она привязана к полю во включающей области

Обновлен: Ноябрь 2007

Сообщение об ошибке

Тип переменной <имя переменной> не будет определен, так как она привязана к полю во включающей области видимости. Либо измените имя <имя переменной>, либо используйте полное имя (например, "Me.VariableName" или "MyBase.VariableName").
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').

Имя переменной цикла совпадает с именем поля класса или другой заключающей ее области видимости. Поскольку управляющая переменная используется без предложения As, она присоединена к полю во включающей области, и компилятор не создает новую переменную и не выводит ее тип.

В следующем примере управляющая переменная Index в операторе For связана с полем Index в классе Customer. Компилятор не создает новую переменную для управляющей переменной Index и не выводит ее тип.

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

По умолчанию это сообщение является предупреждающим. Сведения о том, как скрыть предупреждения или как рассматривать предупреждения как ошибки, см. в разделе Настройка предупреждений в Visual Basic.

Идентификатор ошибки: BC42110

Чтобы устранить это предупреждение, выполните следующие действия:

  • Сделайте переменную цикла локальной, изменив ее имя на уникальный идентификатор.

    For I = 1 To 10
    
  • Поясните с помощью префикса Me. у имени переменной цикла, что она привязывается к полю класса.

    For Me.Index = 1 To 10
    
  • Вместо того, чтобы полагаться на вывод локального типа, используйте предложение As для задания типа переменной цикла.

    For Index As Integer = 1 To 10
    

Пример

В следующем коде показан исправленный первым способом предыдущий пример.

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

См. также

Задачи

Практическое руководство. Ссылка на текущий экземпляр объекта

Основные понятия

Вывод локального типа

Ссылки

Оператор Option Infer

Инструкция For Each... Next (Visual Basic)

Инструкция For... Next (Visual Basic)

Me