Compilerfehler CS0311

Der Typ „type1“ kann nicht als Typparameter „T“ im generischen Typ oder in der generischen Methode „<name>“ verwendet werden. Es findet keine implizite Verweiskonvertierung von „type1“ in „type2“ statt.

Wenn eine Einschränkung auf einen generischen Typparameter angewendet wird, muss eine implizite Identitäts- oder Verweiskonvertierung aus dem konkreten Argument in den Typ der Einschränkung vorliegen.

So beheben Sie diesen Fehler

  1. Ändern Sie das Argument, das Sie zum Erstellen der Klasse verwenden.

  2. Wenn Sie die Klasse besitzen, können Sie die Einschränkung entfernen oder ansonsten Maßnahmen ergreifen, um eine implizite Verweis- oder Identitätskonvertierung zu ermöglichen. Beispielsweise können Sie den zweiten Typ vom ersten erben lassen.

Beispiel

// cs0311.cs  
class B{}  
class C{}  
class Test<T> where T : C  
{ }  

class Program  
{  
    static void Main()  
    {  
        Test<B> test = new Test<B>(); //CS0311  
    }  
}  

Wenn dieser Fehler bei dem Versuch auftritt, ein Werttyp-Argument zu verwenden, beachten Sie, dass eine implizite numerische Konvertierung, beispielsweise von short in int, einem Parameter des generischen Typs nicht genügt.

Siehe auch

Einschränkungen für Typparameter