Dela via


Typen av "<variablename>" är tvetydig eftersom loopens gränser och stegvariabeln inte utvidgas till samma typ

Koden innehåller en For...Next loop där kompilatorn inte kan härleda en datatyp för loopkontrollvariabeln eftersom följande villkor är sanna:

  • Datatypen för loopkontrollvariabeln har inte angetts med en As sats.

  • Loop-gränserna och stegvariabeln innehåller minst två datatyper.

  • Det finns mer än en möjlig konvertering mellan datatyperna.

  • Det finns ingen bästa typ bland kandidaterna, så att valet av typ för loopkontrollvariabeln är tvetydigt.

Följande loop har till exempel en loop som är bunden av typen Integer och en loop som är bunden av typen UInteger:

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

Det finns en möjlig konvertering mellan Integer och UInteger, och en möjlig konvertering mellan UInteger och Integer, men båda begränsar konverteringarna så inget av dem är det bästa valet.

I nästa exempel läggs en tredje variabel av typen Double till. Både Integer och UInteger har standardbreddningskonverteringar till Double, vilket gör konverteringen till Double det bästa valet. Typinferens tilldelar till loopkontrollvariabeln i datatypen Double.

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

Fel-ID: BC30983

Så här åtgärdar du det här felet

  • Konvertera uttryckligen en av variablerna till en typ som de andra har en bredare konvertering till, till exempel:

    For i = m To CLng(n)  
    
  • Använd en As sats för att ange typ av kontrollvariabel:

    For i As Double = m To n
    

Se även