Compilerfehler CS0413Compiler Error 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)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

Dieser Fehler tritt auf, wenn ein generischer Typ den as-Operator verwendet, aber keine Klassentypeinschränkung aufweist.This error occurs if a generic type uses the as operator, but that generic type does not have a class type constraint. 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.The as operator is only allowed with reference types, so the type parameter must be constrained to guarantee that it is not a value type. Um diesen Fehler zu vermeiden, verwenden Sie eine Klassentypeinschränkung oder eine Verweistypeinschränkung.To avoid this error, use a class type constraint or a reference type constraint.

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.This is because the as operator could return null, which is not a possible value for a value type, and the type parameter must be treated as a value type unless it is a class type constraint or a reference type constraint.

BeispielExample

Im folgenden Beispiel wird CS0413 generiert:The following sample generates 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);  
   }  
}