Error del compilador CS0413

Actualización: noviembre 2007

Mensaje de error

El parámetro de tipo 'parámetro de tipo' no se puede utilizar con el operador 'as' porque no tiene ninguna restricción de tipo de clase ni una restricción '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

Este error aparece si un tipo genérico utiliza el operador as, pero dicho tipo genérico no tiene una restricción de tipo de clase. Sólo se permite el operador as con tipos de referencia, por lo que el parámetro de tipo debe restringirse para garantizar que no es un tipo de valor. Para evitar este error, utilice 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

El código siguiente genera el error 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);
   }
}