Partilhar via


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

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ê invoca um procedimento genérico, você, normalmente, fornece um argumento de tipo para cada parâmetro de tipo definido pelo procedimento.No entanto, você tem a alternativa de omitir a lista de argumentos de tipo completamente.Quando você faz isso, o compilador tenta interpretar o tipo de cada argumento de tipo a partir do contexto de sua chamada.Para mais informações, consulte "Inferência de Tipo" em Procedimentos Genéricos em Visual Basic.

Uma possível causa da falha de inferência de tipos de tipos é uma incompatibilidade de classificar 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 Ambos produzem este erro, porque o parâmetro de tipo t chama a uma matriz unidimensional, ao passo que os argumentos de tipo, que o compilador infere as chamadas são um escalar (testValue) e (uma matriz bidimensionaltestMatrix).

ID de erro: BC32050

Para corrigir este erro

  • Certifique-se de que os tipos dos argumentos normais são tais que a inferência de tipos é 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 forma que a inferência de tipos não seja necessária.

Consulte também

Conceitos

Tipos genéricos no Visual Basic

Procedimentos Genéricos em Visual Basic

Referência

Lista de tipos