Share via


Errore del compilatore CS0310

Aggiornamento: novembre 2007

Messaggio di errore

Il tipo 'nometipo' deve essere un tipo non astratto con un costruttore pubblico senza parametri per poterlo utilizzare come parametro 'parametro' nel tipo o metodo generico 'generico'
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'

Nella clausola where di un metodo o di un tipo generico è definito un vincolo nuovo. Per poter essere utilizzato come argomento di tipo per il metodo o il tipo generico, ogni tipo deve pertanto disporre di un costruttore public senza parametri. Per correggere l'errore, accertarsi che il tipo disponga del costruttore corretto oppure modificare la clausola di vincolo per il metodo o il tipo generico.

Esempio

Il seguente codice di esempio genera l'errore 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());
    }
}