CS0310 de erro do compilador

O tipo 'typename' deve ser um tipo de non-abstract com um construtor público sem parâmetros para usá-lo como parâmetro 'parameter' no tipo genérico ou método 'generic'

O tipo genérico ou método define uma nova restrição em seu onde cláusula, portanto, qualquer tipo deve ter um construtor público sem parâmetros para ser usado como um argumento de tipo para aquele tipo genérico ou método.Para evitar esse erro, certifique-se de que o tipo tem do construtor correto ou modificar a cláusula de restrição de tipo genérico ou método.

Exemplo

O exemplo a seguir gera 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());
    }
}