Partager via


Erreur du compilateur CS0413

Mise à jour : novembre 2007

Message d'erreur

Le paramètre de type 'type de paramètre' ne peut pas être utilisé avec l'opérateur 'as', car il n'a pas de contrainte de type classe ni de contrainte 'class'
The type parameter 'type parameter' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint

Cette erreur se produit si un type générique utilise l'opérateur as, mais qu'il n'a pas de contrainte de type classe. L'opérateur as est autorisé uniquement avec les types référence ; le paramètre de type doit donc être contraint pour garantir qu'il ne s'agit pas d'un type valeur. Pour éviter cette erreur, utilisez une contrainte de type classe ou une contrainte de type référence.

En effet, l'opérateur as peut retourner null qui n'est pas une valeur possible pour un type valeur et le paramètre de type doit être traité comme un type valeur à moins qu'il ne s'agisse d'une contrainte de type classe ou d'une contrainte de type référence.

Exemple

L'exemple suivant génère l'erreur CS0413.

// CS0413.cs
// compile with: /target:library
class A {}
class B : A {}

class CMain
{
   A a = null;
   public void G<T>()
   {
      a = new A();
      System.Console.WriteLine (a as T);  // CS0413
   }

   // OK
   public void H<T>() where T : A
   {
      a = new A();
      System.Console.WriteLine (a as T);
   }
}