Compartir a través de


Error del compilador CS0310

Actualización: noviembre 2007

Mensaje de error

El tipo 'nombretipo' debe ser un tipo no abstracto con un constructor público sin parámetros para poder utilizarlo como parámetro 'parámetro' en el tipo o método genérico 'genérico'
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'

El tipo o método genérico define una nueva restricción en su cláusula where, por lo que cualquier tipo debe tener un constructor sin parámetros público para utilizarlo como argumento de tipo de dicho tipo o método genérico. Para evitar este error, asegúrese de que el tipo tiene el constructor correcto, o bien modifique la cláusula de restricción del tipo o método genérico.

Ejemplo

En el código siguiente se genera el error 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());
    }
}