Errore del compilatore CS0456

Aggiornamento: novembre 2007

Messaggio di errore

Il parametro del tipo 'Nome parametro di tipo 1' dispone del vincolo 'struct', pertanto non può essere utilizzato come vincolo per 'Nome parametro di tipo 2'.
Type parameter 'Type Parameter Name 1' has the 'struct' constraint so 'Type Parameter Name 1' cannot be used as a constraint for 'Type Parameter Name 2'

I vincoli di tipo di valore sono implicitamente sealed e non è quindi possibile utilizzarli su un secondo parametro di tipo. I tipi di valore, infatti, non possono essere sottoposti a override. Per correggere l'errore, applicare un vincolo di tipo di valore direttamente al secondo parametro di tipo, anziché eseguire l'operazione in modo indiretto tramite il primo parametro di tipo.

Esempio

Il seguente codice di esempio genera l'errore CS0456.

// CS0456.cs
// compile with: /target:library
public class GenericsErrors
{
   public class G5<T> where T : struct
   {
      public class N<U> where U : T {}   // CS0456
      public class N2<U> where U : struct {}   // OK
   }
}