El tipo de '<variablename>' es ambiguo porque los límites del bucle y la variable de paso no se amplían al mismo tipo

El código contiene un bucle For...Next en el que el compilador no puede inferir un tipo de datos para la variable de control de bucle porque las siguientes condiciones son true:

  • El tipo de datos de la variable de control de bucle no se especifica con una cláusula As .

  • Los límites del bucle y la variable step contienen al menos dos tipos de datos.

  • Existe más de una conversión posibles entre los tipos de datos.

  • No hay ningún tipo mejor entre los candidatos, por lo que la elección del tipo de la variable de control de bucle es ambigua.

Por ejemplo, el siguiente bucle tiene un límite de bucle del tipo de Integer y un bucle enlazado de tipo UInteger:

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

Hay una conversión posible entre Integer y UInteger, y una conversión posible entre UInteger y Integer, pero ambas son conversiones de restricción, por lo que ninguna es la mejor opción.

En el ejemplo siguiente, se agrega una tercera variable de tipo Double . Ambas Integer y UInteger tienen conversiones de ampliación estándar a Double, que realiza la conversión a la mejor opción de Double . La inferencia de tipos se asigna para crear un bucle de la variable de control de bucle i con el tipo de datos Double.

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

Identificador de error: BC30983

Para corregir este error

  • Convierta de forma explícita una de las variables a un tipo para el que los otros tienen una conversión de ampliación, por ejemplo:

    For i = m To CLng(n)  
    
  • Use una cláusula As para especificar el tipo de la variable de control:

    For i As Double = m To n
    

Consulte también