Compilerfehler CS0413

Aktualisiert: November 2007

Fehlermeldung

Der "Typparameter"-Typparameter kann nicht mit dem as-Operator verwendet werden, da er nicht über eine Einschränkung für einen Klassentyp oder über eine class-Einschrä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, der generische Typ jedoch keine Klassentypeinschränkung aufweist. Der as-Operator ist nur bei Referenztypen zulässig. Daher muss der Typparameter eingeschränkt werden, damit gewährleistet ist, dass es sich nicht um einen Werttyp handelt. Um diesen Fehler zu vermeiden, verwenden Sie eine Klassentypeinschränkung oder eine Referenztypeinschränkung.

Das ist erforderlich, weil der as-Operator null zurückgegeben kann. Dieser Wert ist jedoch für einen Werttyp nicht zulässig. Der Typparameter muss als Werttyp behandelt werden, es sei denn, es handelt sich um eine Klassentypeinschränkung oder eine Referenztypeinschrä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);
   }
}