Lire en anglais

Partager via


Échec de l’inférence d’argument de type pour le paramètre de type « <nom_paramètre_type1> » de « <signature_procédure_générique> »

Échec de l’inférence d’argument de type pour le paramètre de type « <nom_paramètre_type1> » de « <signature_procédure_générique> » L’argument de type inféré de l’argument est transmis au paramètre « <nom_paramètre1> » est en conflit avec l’argument de type inféré de l’argument transmis au paramètre « <nom_paramètre2> »

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 parmi les paramètres de type.

Normalement, quand vous appelez une procédure générique, vous fournissez un argument de type pour chaque paramètre de type que la procédure générique définit. Si vous ne fournissez pas d’arguments de type, le compilateur tente 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 conflictuelles pour un paramètre de type, l’inférence de type échoue.

Le code suivant peut générer cette erreur.

VB
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 indique au compilateur de déduire Integer pour le paramètre de type t, tandis que le deuxième argument provoque l’inférence de Double 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 n’ait pas à les déduire.

    VB
    Call takeTwoValues(Of Double)(4, 2.5)  
    

    Notez que dans ce cas, quand les deux arguments normaux sont de différents types de données, 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 différents paramètres de type pour les paramètres normaux, afin qu’il n’existe aucun conflit d’inférence des types.

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

Voir aussi