Ошибка компилятора 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());
}
}