Тип <имяПеременной> является неоднозначным, поскольку для границ цикла и переменной шага нет расширяющего преобразования к одному типу
Обновлен: Ноябрь 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
См. также
Основные понятия
Явные и неявные преобразования
Расширяющие и сужающие преобразования