Erro do Compilador CS0413

O parâmetro de tipo 'type parameter' não pode ser usado com o operador 'as', pois não tem uma restrição de tipo de classe nem uma restrição 'class'

Esse erro ocorrerá se um tipo genérico usar o operador as, mas não tiver uma restrição de tipo de classe. O operador as será permitido somente com tipos de referência e tipos de valor anuláveis, assim, o parâmetro de tipo deve estar restringido para assegurar que não é um tipo de valor. Para evitar esse erro, use uma restrição de tipo de classe ou uma restrição de tipo de referência.

Isso ocorre porque o operador as pode retornar null, que não é um valor possível para um tipo de valor e o parâmetro de tipo deve ser tratado como um tipo de valor, a menos que ele seja uma restrição de tipo de classe ou uma restrição de tipo de referência.

Exemplo

O exemplo a seguir gera o erro 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);  
   }  
}