Partilhar via


O tipo de '<nome de variável>' é ambíguo porque os limites do loop e a variável STEP não se estende ao mesmo tipo

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

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

  • O loop limita-se e a variável de etapa contém pelo menos do tipos de dados.

  • Mais de uma conversão possível existem entre os tipos de dados.

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

Por exemplo, o seguite loop possui um limite de loop do tipe Integer e um 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 conversão possível entre Integer e UInteger, e uma possível entre UInteger e Integer, mas ambos são conversões reduzidas e, então, nenhuma das duas é a melhor escolha.

No próximo exemplo, uma terceira variável do tipo Double é adicionada.Tanto Integer quanto UInteger possuem conversões de expansão padrão para Double, que faz coversão para a melhor escolha Double.Inferência de tipos designa à variável de controle de loop i o tipo de dados Double.

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

ID de erro: BC30983

Para corrigir este erro

  • Explicitamente converte uma das variáveis para um tipo para o qual os outros possuem uma conversão de expansão, por exemplo:

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

    For i As Double = m To n 
    

Consulte também

Conceitos

Conversões explícita e implícita 

Inferência de tipos local

Conversões Ampliadoras e Redutoras

Referência

For... Next demonstrativo (Visual Basic)

Declaração Option Infer