Compilerfehler CS0413

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 (Der Typparameter „typparameter“ kann nicht mit dem „as“-Operator verwendet werden, da er weder über eine Klassentypeinschränkung noch über eine Klasseneinschränkung verfügt)

Dieser Fehler tritt auf, wenn ein generischer Typ den as-Operator verwendet, aber keine Klassentypeinschränkung aufweist. Der as-Operator ist nur für Verweistypen zulässig, weshalb der Typparameter eingeschränkt werden muss, um zu garantieren, dass er kein Werttyp ist. Um diesen Fehler zu vermeiden, verwenden Sie eine Klassentypeinschränkung oder eine Verweistypeinschränkung.

Dies liegt daran, dass der as-Operator null zurückgeben kann, was kein zulässiger Wert für einen Werttyp ist. Der Typparameter muss als Werttyp behandelt werden, es sei denn, er verfügt über eine Klassentypeinschränkung oder eine Verweistypeinschränkung.

Beispiel

Im folgenden Beispiel wird CS0413 generiert:

// 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);  
   }  
}