CS0413 de erro do compilador

Mensagem de erro

O parâmetro de tipo de parâmetro de tipo não pode ser usado com o operador 'sistema autônomo' porque ele não tem uma restrição de tipo de classe nem uma restrição 'class'

Este erro ocorre se um tipo genérico usa o sistema autônomo operador, mas que tipo genérico não tem uma restrição de tipo de classe.The as operador só é permitido com tipos de referência, o parâmetro de tipo deve ser restrita para garantir que não é um tipo de valor. Para evitar esse erro, use uma restrição de tipo de referência ou uma restrição de tipo de classe.

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

Exemplo

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