“<variablename>”的类型不明确,因为循环边界和步骤变量未扩大到同一类型

更新:2007 年 11 月

代码包含一个 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 为转换目标的转换成为最佳选择。类型推断将数据类型 Double 分配给循环控制变量 i。

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

**错误 ID:**BC30983

更正此错误

  • 将其中一个变量显式转换为其他变量能够扩大转换到的类型,例如:

    For i = m To CLng(n)
    
  • 使用 As 子句指定控制变量的类型:

    For i As Double = m To n 
    

请参见

概念

隐式转换和显式转换

局部类型推理

扩大转换和收缩转换

参考

For...Next 语句 (Visual Basic)

Option Infer 语句