Erreur du compilateur CS0311

Impossible d’utiliser le type 'type1' comme paramètre de type 'T' dans le type ou la méthode générique '<name>'. Il n’existe aucune conversion de référence implicite de 'type1' vers 'type2'.

Quand une contrainte est appliquée à un paramètre de type générique, il doit exister une conversion de référence ou d’identité implicite de l’argument concret en type de la contrainte.

Pour corriger cette erreur

  1. Changez l’argument que vous utilisez pour créer la classe.

  2. Si vous êtes propriétaire de la classe, vous pouvez supprimer la contrainte ou faire en sorte qu’il y ait une conversion d’identité ou de référence implicite. Par exemple, vous pouvez faire en sorte que le deuxième type hérite du premier.

Exemple

// cs0311.cs  
class B {}  
class C {}  
class Test<T> where T : C  
{ }  
  
class Program  
{  
    static void Main()  
    {  
        Test<B> test = new Test<B>(); //CS0311  
    }  
}  

Si cette erreur se produit quand vous tentez d’utiliser un argument de type valeur, notez qu’une conversion numérique implicite, par exemple de short en int, ne satisfait pas à un paramètre de type générique.

Voir aussi