Errore del compilatore CS0312
Aggiornamento: novembre 2007
Messaggio di errore
Impossibile utilizzare il tipo 'tipo1' come parametro di tipo 'nome' nel tipo o metodo generico 'nome'. Il tipo nullable 'tipo1' non soddisfa il vincolo di 'tipo2'.
The type 'type1' cannot be used as type parameter 'name' in the generic type or method 'name'. The nullable type 'type1' does not satisfy the constraint of 'type2'.
Un tipo nullable è distinto dal corrispondente non nullable; tra i due tipi non esiste alcuna conversione dei riferimenti o conversione di identificazione implicita. Una conversione boxing di tipo nullable non soddisfa un vincolo di tipo generico. Nell'esempio riportato di seguito il primo parametro di tipo è Nullable<int> e il secondo parametro di tipo è System.Int32.
Per correggere l'errore
Rimuovere il vincolo.
Nell'esempio seguente specificare int? o object per il secondo argomento di tipo.
Esempio
Nel codice seguente viene generato l'errore CS0312:
// cs0312.cs
class Program
{
static void MTyVar<T, U>() where T : U { }
static int Main()
{
MTyVar<int?, int>(); // CS0312
return 1;
}
}
Anche se un tipo nullable è distinto da un tipo non nullable, sono consentiti vari tipi di conversione fra valori nullable e non nullable.