Inferenza dell'argomento di tipo non riuscita per il parametro di tipo '<nomeparametrotipo1>' di '<firmaproceduragenerica>'

Aggiornamento: novembre 2007

Messaggio di errore

Inferenza dell'argomento di tipo non riuscita per il parametro di tipo '<nomeparametrotipo1>' di '<firmaproceduragenerica>' L'argomento di tipo dedotto dall'argomento passato al parametro '<nomeparametro1>' è in conflitto con l'argomento di tipo inferito dall'argomento passato al parametro '<nomeparametro2>'.
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>'.

È stata chiamata una routine generica senza argomenti di tipo e l'inferenza di tipo tentata ha generato un conflitto di tipo di dati fra i parametri di tipo.

Generalmente, quando si chiama una routine generica, si fornisce un argomento di tipo per ogni parametro di tipo definito dalla routine generica. Se non viene fornito alcun argomento di tipo, il compilatore tenta di dedurre i tipi da passare ai parametri di tipo. Se il contesto della chiamata fornisce informazioni sui tipi di dati contraddittorie per un parametro di tipo, l'inferenza del tipo ha esito negativo.

Il seguente codice può generare questo errore.

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

Poiché il primo argomento induce il compilatore a dedurre un tipo Integer per il parametro di tipo t, mentre il secondo argomento lo induce a inferire il tipo Double per lo stesso parametro di tipo, viene a crearsi un conflitto relativamente al tipo di dati da passare a t.

ID errore: BC32116

Per correggere l'errore

  • Fornire degli argomenti di tipo al tipo generico in modo che il compilatore non debba dedurli.

    Call takeTwoValues(Of Double)(4, 2.5)
    

    Osservare che in questo caso, in cui i due argomenti normali sono caratterizzati da tipi di dati diversi, il codice chiamante deve passare un argomento di tipo adeguato per entrambi i tipi di dati. In questo caso, Integer si amplia in Double.

    -oppure-

  • Ridefinire la routine generica per specificare parametri di tipo diverso per i parametri normali, in modo che non si crei conflitto nel dedurre i tipi.

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

Vedere anche

Concetti

Tipi generici in Visual Basic

Routine generiche in Visual Basic

Riferimenti

Elenco dei tipi