Partager via


Erreur du compilateur CS0312

Mise à jour : novembre 2007

Message d'erreur

Le type 'type1' ne peut pas être utilisé comme paramètre de type 'nom' dans le type ou la méthode générique 'nom'. Le type nullable 'type1' ne satisfait pas la contrainte de 'type2'.
The type 'type1' cannot be used as type parameter 'name' in the generic type or method 'name'. The nullable type 'type1' does not satisfy the constraint of 'type2'.

Un type nullable se distingue de son équivalent non nullable ; aucune conversion de référence implicite ou de conversion d'identité n'existe entre eux. Une conversion boxing nullable ne satisfait pas de contrainte de type générique. Dans l'exemple suivant, le premier paramètre de type est un Nullable<int> et le second un System.Int32.

Pour corriger cette erreur

  1. Supprimez la contrainte.

  2. Dans l'exemple suivant, changez le second argument de type en int? ou object.

Exemple

Le code suivant génère l'erreur CS0312 :

// cs0312.cs
class Program
{
    static void MTyVar<T, U>() where T : U { }

    static int Main()
    {
        MTyVar<int?, int>(); // CS0312
        return 1;
    }
}

Même si un type nullable est différent d'un type non nullable, différents types de conversions sont autorisés entre les valeurs nullables et non nullables.

Voir aussi

Référence

Types nullables (Guide de programmation C#)