Compilerfehler CS0310

Der Typ "Typname" muss ein abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor sein, um im generischen Typ oder der generischen Methode "Generikum" als Parameter "Parameter" verwendet werden zu können.

Der generische Typ bzw. die generische Methode definiert eine neue Einschränkung in der where-Klausel. Daher muss jeder Typ einen öffentlichen, parameterlosen Konstruktor besitzen, damit er als Typargument für diesen generischen Typ oder die generische Methode verwendet werden kann. Stellen Sie zur Vermeidung dieses Fehlers sicher, dass der Typ den korrekten Konstruktor aufweist, oder ändern Sie die Einschränkungsklausel des generischen Typs bzw. der generischen Methode.

Beispiel

Im folgenden Beispiel wird CS0310 generiert:

// CS0310.cs
using System;

class G<T> where T : new()
{
    T t;

    public G()
    {
        t = new T();
        Console.WriteLine(t);
    }
}

class B
{
    private B() { }
    // Try this instead:
    // public B() { }
}

class CMain
{
    public static void Main()
    {
        G<B> g = new G<B>();   // CS0310
        Console.WriteLine(g.ToString());
    }
}