Поделиться через


Ошибка компилятора CS0310

Обновлен: Ноябрь 2007

Сообщение об ошибке

Тип "typename" для использования в качестве параметра "parameter" в универсальном типе или методе "generic" должен быть неабстрактным и иметь открытый конструктор без параметров
The type 'typename' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'parameter' in the generic type or method 'generic'

Универсальный тип или метод определяет новое ограничение в предложении where, состоящее в том, что любой тип, используемый в качестве аргумента универсального типа или метода, должен иметь открытый конструктор без параметров. Чтобы избежать этой ошибки убедитесь в том, что тип имеет надлежащий конструктор или измените предложение ограничения для универсального типа или метода.

Пример

В следующем примере возникает ошибка CS0310.

// 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());
    }
}