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


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

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

Type of '<variablename>' is ambiguous because the loop bounds and the step variable do not widen to the same type

Код содержит цикл For...Next, в котором компилятор не может передать тип данных для переменной цикла, поскольку выполнены следующие условия:

  • Тип данных переменной цикла не указан при помощи предложения As.

  • Границы цикла и переменная шага содержат, по крайней мере, два типа.

  • Существует несколько возможных преобразований между типами данных.

  • Нет оптимального типа среди кандидатов, поэтому выбор типа для переменной цикла неоднозначен.

Например, следующий цикл имеет одну границу цикла типа Integer и одну границу типа UInteger:

Dim m As Integer = 1
Dim n As UInteger = 10
' Not valid.
' For i = m To n
    ' Loop processing.
' Next

Есть возможное сужающее преобразование между Integer и UInteger и возможное преобразование между UInteger и Integer, но они оба являются сужающими, а поэтому они не являются наилучшим решением.

В следующем примере добавляется третья переменная типа Double. Integer и UInteger имеют стандартные расширяющие преобразования в Double, что делает преобразование в Double наилучшим решением. Преобразование к типу присваивает циклу управляющую переменную i типа данных Double.

Dim stepVar As Double = 1
' Valid.
For i = m To n Step stepVar
    ' Loop processing.
Next

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

Исправление этой ошибки

  • Преобразуйте явным способом одну из переменных к типу другой переменной, для которого есть расширяющее преобразование, например:

    For i = m To CLng(n)
    
  • Используйте предложение As, чтобы указать тип элемента управляющей переменной:

    For i As Double = m To n 
    

См. также

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

Явные и неявные преобразования

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

Расширяющие и сужающие преобразования

Ссылки

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

Оператор Option Infer