Compilerfehler CS0311

Der Typ "Typ1" kann nicht als Typparameter "T" im generischen Typ oder in der generischen Methode "<Name>" verwendet werden.Es ist keine implizierte Verweiskonvertierung von "Typ1" in "Typ2" vorhanden.

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

So beheben Sie diesen Fehler

  1. Ändern Sie das verwendete Argument so, dass die Klasse erstellt wird.

  2. Wenn Sie Eigentümer der Klasse sind, können Sie die Einschränkung entfernen oder Maßnahmen ergreifen, um eine implizite Verweis- bzw. Identitätskonvertierung zu ermöglichen. So können Sie beispielsweise dafür sorgen, dass der zweite Typ vom ersten Typ erbt.

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
    }
}

Falls dieser Fehler auftritt, wenn Sie versuchen, ein Werttypargument zu verwenden, denken Sie daran, dass eine implizite numerische Konvertierung, zum Beispiel von short in int, die Anforderungen eines generischen Typparameters nicht erfüllt.

Siehe auch

Referenz

Einschränkungen für Typparameter (C#-Programmierhandbuch)