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());
}
}