Für den <Typparametername1>-Typparameter von '<Signatur der generischen Prozedur>' war kein Rückschluss auf ein Typargument möglich

Aktualisiert: November 2007

Fehlermeldung

Für den <Typparametername1>-Typparameter von "<Signatur der generischen Prozedur>" war kein Rückschluss auf ein Typargument möglich. Das Typargument, das per Rückschluss von dem an den <Parametername1>-Parameter übergebenen Argument abgeleitet wurde, verursacht einen Konflikt mit dem Typargument, das per Rückschluss von dem an den <Parametername2>-Parameter übergegebenen Argument abgeleitet wurde
Type argument inference failed for type parameter '<typeparametername1>' of '<genericproceduresignature>'. Type argument inferred from the argument passed to parameter '<parametername1>' conflicts with the type argument inferred from the argument passed to parameter '<parametername2>'.

Eine generische Prozedur wird ohne Typargumente aufgerufen, und durch den Versuch, den Typ abzuleiten, wurde eine Datentypkonflikt zwischen den Typparametern verursacht.

Wenn Sie eine generische Prozedur aufrufen, geben Sie i. d. R. für jeden Typparameter, der durch die generische Prozedur definiert wird, ein Typargument an. Wenn Sie keine Typargumente angeben, versucht der Compiler, die an die Typparameter zu übergebenden Typen abzuleiten. Wenn durch den Kontext des Aufrufs Datentypinformationen für einen Typparameter bereitgestellt werden, die einen Konflikt verursachen, schlägt die Typableitung fehl.

Dieser Fehler kann durch folgenden Code generiert werden.

Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)

Da der Compiler aufgrund des ersten Arguments für den Typparameter tInteger ableitet, doch aufgrund des zweiten Arguments für denselben Typparameter Double, entsteht ein Konflikt in Bezug auf den an t zu übergebenden Datentyp.

Fehler-ID: BC32116

So beheben Sie diesen Fehler

  • Geben Sie Typargumente für den generischen Typ an, damit der Compiler sie nicht ableiten muss.

    Call takeTwoValues(Of Double)(4, 2.5)
    

    Beachten Sie, dass in diesem Fall, in dem zwei normale Argumente unterschiedliche Datentypen aufweisen, der aufrufende Code ein Typargument übergeben muss, das den Anforderungen dieser beiden Datentypen entspricht. In diesem Fall wird Integer zu Double erweitert.

    – oder –

  • Definieren Sie die generische Prozedur neu, indem Sie für die normalen Parameter unterschiedliche Typparameter angeben, sodass beim Ableiten der Typen kein Konflikt auftritt.

    Public Sub takeTwoValues(Of t1, t2)(ByVal x As t1, ByVal y As t2)
    

Siehe auch

Konzepte

Generische Typen in Visual Basic

Generische Prozeduren in Visual Basic

Referenz

Typenliste