Partilhar via


O tipo de '<variablename>' é ambíguo porque os limites do loop e a variável step não se alargam para o mesmo tipo

Seu código contém um For...Next loop no qual o compilador não pode inferir um tipo de dados para a variável de controle de loop porque as seguintes condições são verdadeiras:

  • O tipo de dados da variável de controle de loop não é especificado com uma As cláusula.

  • Os limites de loop e a variável step contêm pelo menos dois tipos de dados.

  • Existe mais de uma conversão possível entre os tipos de dados.

  • Não há melhor tipo entre os candidatos, de modo que a escolha do tipo para a variável de controle de loop é ambígua.

Por exemplo, o loop a seguir tem um loop vinculado do tipo Integer e um loop vinculado do tipo UInteger:

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

Há uma possível conversão entre Integer e UInteger, e uma possível conversão entre UInteger e Integer, mas ambos são conversões estreitas, portanto, nenhuma delas é a melhor escolha.

No exemplo seguinte, uma terceira variável de tipo Double é adicionada. Ambos Integer e UInteger têm conversões de ampliação padrão para Double, o que torna a conversão para Double a melhor escolha. A inferência de tipo atribui à variável i de controle de loop o tipo Doublede dados.

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

ID de erro: BC30983

Para corrigir este erro

  • Converta explicitamente uma das variáveis em um tipo para o qual as outras tenham uma conversão de ampliação, por exemplo:

    For i = m To CLng(n)  
    
  • Use uma As cláusula para especificar o tipo da variável de controle:

    For i As Double = m To n
    

Consulte também