Compilerfehler CS0304

Es kann keine Instanz des Variablentyps "Typ" erstellt werden, weil er keine new()-Einschränkung aufweist

Wenn Sie eine generische Klasse implementieren und mit dem new-Schlüsselwort eine neue Instanz von einem beliebigen für einen Typparameter T angegebenen Typ erstellen möchten, müssen Sie die new()-Einschränkung in der Klassendeklaration auf T anwenden, wie im folgenden Beispiel gezeigt:

class C<T> where T : new()

Die new()-Einschränkung setzt Typsicherheit durch, indem sie erzwingt, dass jeder konkrete für T angegebene Typ einen parameterlosen Standardkonstruktor aufweist.Der Fehler CS0304 tritt auf, wenn Sie versuchen, mit dem new-Operator im Text der Klasse eine Instanz des Typparameters T zu erstellen, und in T die new()-Einschränkung nicht angegeben ist.Wenn der Code auf dem Client versucht, die generische Klasse mit einem Typ zu instanziieren, der über keinen Standardkonstruktor verfügt, wird Compilerfehler CS0310 generiert.

Im folgenden Beispiel wird CS0304 generiert.

// CS0304.cs
// Compile with: /target:library.
class C<T>
{
    // The following line generates CS0304.
    T t = new T();
}

Der new-Operator ist in Methoden der Klasse ebenfalls nicht zulässig.

// Compile with: /target:library.
class C<T>
{
    public void ExampleMethod()
    {
        // The following line generates CS0304.
        T t = new T();
    }
}

Um den Fehler zu vermeiden, deklarieren Sie die Klasse mit der new()-Einschränkung, wie im folgenden Beispiel gezeigt.

// Compile with: /target:library.
class C<T> where T : new()
{
    T t = new T();

    public void ExampleMethod()
    {
        T t = new T();
    }
}

Siehe auch

Weitere Ressourcen

C#-Compilerfehler