Partager via


L'inférence d'argument de type a échoué pour le paramètre de type '<NomParamètreDeType1>' de '<SignatureDeProcédureGénérique>'

Mise à jour : novembre 2007

Message d'erreur

L'inférence d'argument de type a échoué pour le paramètre de type '<NomParamètreDeType1>' de '<SignatureDeProcédureGénérique>'. L'argument de type déduit de l'argument passé au paramètre' <NomParamètre1>' est en conflit avec l'argument de type déduit de l'argument passé au paramètre' <NomParamètre2>.
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>'.

Une procédure générique est appelée sans argument de type, et l'inférence de type tentée a généré un conflit de type de données entre les paramètres de type.

En général, lorsque vous appelez une procédure générique, vous fournissez un argument de type pour chaque paramètre de type défini par la procédure générique. Si vous ne fournissez pas d'arguments de type, le compilateur essaie de déduire les types à passer aux paramètres de type. Si le contexte de l'appel fournit des informations de type de données incompatibles pour un paramètre de type, l'inférence de type échoue.

Le code suivant peut générer ce message d'erreur.

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

Étant donné que le premier argument provoque l'inférence de Integer par le compilateur pour le paramètre de type t, et que le deuxième argument provoque l'inférence de Double par le compilateur pour le même paramètre de type, il existe un conflit sur le type de données à passer à t.

ID d'erreur : BC32116

Pour corriger cette erreur

  • Fournissez des arguments de type au type générique, afin que le compilateur ne les déduit pas.

    Call takeTwoValues(Of Double)(4, 2.5)
    

    Notez que dans ce cas, où les deux arguments normaux sont de types de données différents, le code appelant doit passer un argument de type qui peut prendre en charge ces deux types de données. Dans ce cas, Integer s'étend à Double.

    - ou -

  • Redéfinissez la procédure générique pour spécifier des paramètres de type différents pour les paramètres normaux, afin qu'il n'existe aucun conflit déduisant les types.

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

Voir aussi

Concepts

Types génériques en Visual Basic

Procédures génériques dans Visual Basic

Référence

Liste de types