Typ zmiennej jest<> niejednoznaczny, ponieważ granice pętli i zmienna krokowa nie są rozszerzane do tego samego typu

Kod zawiera pętlę For...Next , w której kompilator nie może wywnioskować typu danych dla zmiennej sterującej pętli, ponieważ spełnione są następujące warunki:

  • Typ danych zmiennej sterującej pętli nie jest określony za pomocą klauzuli As .

  • Ograniczenia pętli i zmienna kroku zawierają co najmniej dwa typy danych.

  • Istnieje więcej niż jedna możliwa konwersja między typami danych.

  • Nie ma najlepszego typu wśród kandydatów, więc wybór typu dla zmiennej sterującej pętli jest niejednoznaczny.

Na przykład następująca pętla ma jedną pętlę związaną z typem Integer i jedną granicą pętli typu UInteger:

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

Istnieje możliwa konwersja między i UInteger, a możliwa konwersja między Integer UInteger i Integer, ale obie są konwersje zawężające, więc żaden z nich nie jest najlepszym wyborem.

W następnym przykładzie zostanie dodana trzecia zmienna typu Double . Zarówno, Integer jak i UInteger mają standardowe konwersje rozszerzające na Double, co sprawia, że konwersja na Double najlepszy wybór. Wnioskowanie typu przypisuje do zmiennej sterującej pętli typ i Doubledanych .

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

Identyfikator błędu: BC30983

Aby poprawić ten błąd

  • Jawnie przekonwertuj jedną ze zmiennych na typ, do którego inne mają konwersję rozszerzającą, na przykład:

    For i = m To CLng(n)  
    
  • As Użyj klauzuli , aby określić typ zmiennej sterującej:

    For i As Double = m To n
    

Zobacz też