Der Typ von '<Variablenname>' ist mehrdeutig, weil die Schleifenbegrenzungen und die step-Klausel nicht in denselben Typ konvertiert werden

Aktualisiert: November 2007

Type of '<variablename>' is ambiguous because the loop bounds and the step variable do not widen to the same type

Der Code enthält eine For...Next-Schleife, in der der Compiler aufgrund der folgenden Bedingungen keinen Datentyp für die Schleifensteuerungsvariable ableiten kann:

  • Der Datentyp der Schleifensteuerungsvariablen wird nicht mit einer As-Klausel angegeben.

  • Die Schleifenbegrenzungen und die step-Variable enthalten mindestens zwei Datentypen.

  • Zwischen den Datentypen sind mehrere Konvertierungen möglich.

  • Es gibt keinen optimalen Typ unter den Kandidaten, sodass die Auswahl des Typs für die Schleifensteuerungsvariable mehrdeutig ist.

Die folgende Schleife weist beispielsweise eine Schleifenbegrenzung vom Typ Integer und eine Schleifenbegrenzung vom Typ UInteger auf:

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

Es wird eine mögliche Konvertierung zwischen Integer und UInteger sowie eine mögliche Konvertierung zwischen UInteger und Integer unterstützt, bei beiden handelt es sich jedoch um einschränkende Konvertierungen, sodass keine der beiden eine optimale Wahl darstellt.

Im nächsten Beispiel wird eine dritte Variable des Typs Double hinzugefügt. Sowohl Integer als auch UInteger verfügen über standardmäßige Erweiterungskonvertierungen für Double, wodurch die Konvertierung in Double zur besten Wahl wird. Durch den Typrückschluss wird dem Datentyp Double die Schleifensteuerungsvariable i zugewiesen.

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

Fehler-ID: BC30983

So beheben Sie diesen Fehler

  • Konvertieren Sie eine der Variablen explizit in einen Typ, für den andere über eine Erweiterungskonvertierung verfügen, beispielsweise:

    For i = m To CLng(n)
    
  • Verwenden Sie eine As-Klausel, um den Typ der Steuerelementvariablen anzugeben:

    For i As Double = m To n 
    

Siehe auch

Konzepte

Implizite und explizite Konvertierungen

Lokaler Typrückschluss

Erweiternde und eingrenzende Konvertierungen

Referenz

For...Next-Anweisung (Visual Basic)

Option Infer-Anweisung