Partager via


Erreur du compilateur CS0310

Mise à jour : novembre 2007

Message d'erreur

Le "typename" de type doit être un type abstrait avec un constructeur sans paramètre public pour l'utiliser comme "paramètre" de paramètre dans le type générique ou la méthode "générique"
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'

Le type ou la méthode générique définit une contrainte new dans sa clause where ; par conséquent, tout type doit avoir un constructeur sans paramètre public pour pouvoir être utilisé comme un argument de type pour ce type ou cette méthode générique. Pour éviter cette erreur, assurez-vous que le type possède le constructeur correct ou modifiez la clause de contrainte du type ou de la méthode générique.

Exemple

L'exemple suivant génère l'erreur 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());
    }
}