O parâmetro de tipo '<typeparametername>' para '<genericprocedurename>' não pode ser deduzidoType parameter '<typeparametername>' for '<genericprocedurename>' cannot be inferred

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.A generic procedure is called without supplying a type argument list, and type inference fails for one of the type arguments.

Quando você chama um procedimento genérico, normalmente fornece um argumento de tipo para cada parâmetro de tipo definido pelo procedimento.When you call a generic procedure, you normally supply a type argument for each type parameter defined by the procedure. No entanto, você tem a alternativa de omitir a lista de argumentos de tipo inteiramente.However, you have the alternative of omitting the type argument list entirely. Quando você faz isso, o compilador tenta inferir o tipo de cada argumento de tipo do contexto de sua chamada.When you do this, the compiler attempts to infer the type of each type argument from the context of your call. Para obter mais informações, consulte "inferência de tipos" em procedimentos genéricos em Visual Basic.For more information, see "Type Inference" in Generic Procedures in Visual Basic.

Uma possível causa da falha de inferência de tipos é uma incompatibilidade de classificação entre um parâmetro de tipo e o tipo de chamada.One possible cause of type inference failure is a mismatch of rank between a type parameter and the calling type. O código a seguir ilustra isso.The following code illustrates this.

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 produzir 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 ).In the preceding code, the two calls to findLargest both produce this error, because the type parameter t calls for a one-dimensional array, whereas the type arguments the compiler infers from the calls are a scalar (testValue) and a two-dimensional array (testMatrix).

ID do erro: BC32050Error ID: BC32050

Para corrigir este erroTo correct this error

  • Verifique se os tipos dos argumentos normais são de tal forma que a inferência de tipos é consistente com os parâmetros de tipo declarados para o procedimento genérico.Make sure the types of the normal arguments are such that type inference is consistent with the type parameters declared for the generic procedure.

    -ou--or-

  • Chame o procedimento genérico com uma lista completa de argumentos de tipo, para que a inferência de tipos não seja necessária.Call the generic procedure with a complete type argument list, so that type inference is not necessary.

Consulte tambémSee also