O parâmetro de tipo '<typeparametername>' para '<genericprocedurename>' não pode ser inferido

Um procedimento genérico é chamado sem fornecer uma lista de argumentos de tipo e a inferência de tipos falha para um dos argumentos de tipo.

Quando você chama um procedimento genérico, normalmente fornece um argumento de tipo para cada parâmetro de tipo definido pelo procedimento. No entanto, você tem a alternativa de omitir totalmente a lista de argumentos de tipo. Quando você faz isso, o compilador tenta inferir o tipo de cada argumento de tipo do contexto da sua chamada. Para obter mais informações, confira "Inferência de tipos" em Procedimentos genéricos no Visual Basic.

Uma possível causa de falha de inferência de tipo é uma incompatibilidade de classificação entre um parâmetro de tipo e o tipo de chamada. O código a seguir ilustra isso.

Public Sub displayLargest(Of t As IComparable)(ByVal arg() As t)  
    ' Insert code to find and display the largest element of arg().  
End Sub  
Public Sub callGenericSub()  
    Dim testValue As Integer  
    findLargest(testValue)  
    Dim testMatrix(,) As Integer  
    findLargest(testMatrix)  
End Sub  

No código anterior, as duas chamadas para findLargest produzem esse erro, porque o parâmetro de tipo t chama uma matriz unidimensional, enquanto os argumentos de tipo que o compilador infere das chamadas são um escalar (testValue) e uma matriz bidimensional (testMatrix).

ID do erro: BC32050

Para corrigir este erro

  • Verifique se os tipos dos argumentos normais são tais que a inferência de tipo seja consistente com os parâmetros de tipo declarados para o procedimento genérico.

    -ou-

  • Chame o procedimento genérico com uma lista completa de argumentos de tipo, de modo que a inferência de tipo não seja necessária.

Confira também