Digite a inferência de argumento fracassada para o parâmetro de tipo '<typeparametername>' do '<genericproceduresignature>'
Mensagem de erro
Inferência de argumento falhou para o parâmetro de tipo '<typeparametername1>' de '<genericproceduresignature>'.Argumento de tipo inferido do argumento passado ao parâmetro '<parametername1>' está em conflito com o argumento de tipo inferido do argumento passado ao parâmetro '<parametername2>'.
Um procedimento genérico é chamado sem nenhum argumento de tipo, e todas as inferências de tipo tentadas produziram um conflito tipo de dados entre os parâmetros de tipo.
Normalmente, quando você invoca um procedimento genérico, você fornece um argumento de tipo para cada parâmetro de tipo que o procedimento genérico define.Se você não fornece nenhum argumento de tipo, o compilador procura inferir os tipos a serem passados para os parâmetros de tipo.Se o contexto da chamada fornece informações de tipo de dados conflitantes para o parâmetro de tipo, então a inferência de tipos fracassa.
O código a seguir pode gerar este tipo de erro.
Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)
Devido ao fato de que o primeiro argumento leva o compilador a inferir Integer para o parâmetro de tipo t, enquanto o segundo argumento o leva a inferir Double para o mesmo parâmetro de tipo, há um conflito ao respeito do tipo de dados a se passar ao t.
ID de erro: BC32116
Para corrigir este erro
Forneça os argumentos de tipo ao tipo genérico, de modo que o compilador não precise inferi-los.
Call takeTwoValues(Of Double)(4, 2.5)
Observe que neste caso, quando dois argumentos normais são de diferentes tipos de dados, o código de chamada precisa passar um argumento de tipo que possa acomodar ambos os tipos de dados.Neste caso, Integer se expande para Double.
- ou -
Redefina o procedimento genérico para especificar diferentes parâmtros de tipo para os parâmetros normais, de modo que não haja conflitos inferindo os tipos.
Public Sub takeTwoValues(Of t1, t2)(ByVal x As t1, ByVal y As t2)
Consulte também
Conceitos
Tipos genéricos no Visual Basic
Procedimentos Genéricos em Visual Basic