Partager via


Erreur du compilateur CS0456

Mise à jour : novembre 2007

Message d'erreur

Le paramètre de type 'paramètre de type Nom 1' a la contrainte 'struct', donc 'paramètre de type Nom 1' ne peut pas être utilisé comme contrainte pour 'paramètre de type Nom 2'
Type parameter 'Type Parameter Name 1' has the 'struct' constraint so 'Type Parameter Name 1' cannot be used as a constraint for 'Type Parameter Name 2'

Les contraintes de type valeur sont implicitement sealed ; ces contraintes ne peuvent donc pas être utilisées comme contraintes sur un deuxième paramètre de type. Cela s'explique par le fait que les types valeur ne peuvent pas être substitués. Pour résoudre cette erreur, mettez directement une contrainte de type valeur sur le deuxième paramètre de type, au lieu de le faire indirectement au moyen du premier paramètre de type.

Exemple

L'exemple suivant génère l'avertissement CS0456.

// CS0456.cs
// compile with: /target:library
public class GenericsErrors
{
   public class G5<T> where T : struct
   {
      public class N<U> where U : T {}   // CS0456
      public class N2<U> where U : struct {}   // OK
   }
}