Compiler Error CS0304

变量类型“type”没有 new() 约束,因此无法创建该类型的实例

如果实现泛型类,并且需要使用 new 关键字来创建为类型参数 T 提供的任何类型的新实例,则必须在类声明中将 new() 约束应用于 T,如下面的示例所示。

class C<T> where T : new()

new() 约束将通过确保为 T 提供的任何具体类型都具有默认值(无参数构造函数)来实施类型安全。如果您在 T 未指定 new() 约束时尝试在类的正文中使用 new 运算符创建类型参数 T 的实例,将出现 CS0304。在客户端,如果代码尝试使用没有默认构造函数的类型实例化泛型类,则该代码将生成 Compiler Error CS0310

下面的示例会生成 CS0304。


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

该类的方法中也不允许使用 new 运算符。


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

若要避免该错误,请使用 new() 约束声明类,如下面的示例所示。


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

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

请参阅

C# Compiler Errors