Leer en inglés

Compartir vía


Error del compilador CS0413

El parámetro de tipo 'type parameter' no se puede usar con el operador 'as' porque no tiene ninguna restricción de tipo de clase ni una restricción 'class'

Este error aparece si un tipo genérico usa el operador as, pero dicho tipo genérico no tiene una restricción de tipo de clase. Solo se permite el operador as con tipos de referencia y tipos de valor NULL, por lo que el parámetro de tipo debe restringirse para garantizar que no es un tipo de valor. Para evitar este error, use una restricción de tipo de clase o una restricción de tipo de referencia.

Esto se debe a que el operador as podría devolver null, que no es un valor permitido para un tipo de valor y el parámetro de tipo debe tratarse como un tipo de valor a menos que sea una restricción de tipo de clase o una restricción de tipo de referencia.

Ejemplo

En el ejemplo siguiente se genera la advertencia 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);  
   }  
}