Error del compilador CS0456

Actualización: noviembre 2007

Mensaje de error

El parámetro de tipo 'Nombre del parámetro de tipo 1' tiene la restricción 'struct'; por tanto, 'Nombre del parámetro de tipo 1' no se puede utilizar como restricción para 'Nombre del parámetro de 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'

Se sellan implícitamente las restricciones de tipo de valor, por lo que no se pueden utilizar dichas restricciones como restricciones en un segundo parámetro de tipo. Esto se debe a que no se pueden reemplazar los tipos de valor. Para resolver este error, coloque una restricción de tipo de valor directamente en el segundo parámetro de tipo, en lugar de hacerlo indirectamente por medio del primer parámetro de tipo.

Ejemplo

El código siguiente genera el error 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
   }
}