Error del compilador CS0315

Actualización: noviembre 2007

Mensaje de error

El tipo 'tipo de valor' no se puede usar como parámetro de tipo 'T' en el tipo o método genérico 'tipo o método<T>'. No hay conversión boxing de 'tipo de valor' a 'tipo de referencia'.
The type 'valueType' cannot be used as type parameter 'T' in the generic type or method 'TypeorMethod<T>'. There is no boxing conversion from 'valueType' to 'referenceType'.

Este error se produce al restringir un tipo genérico a una clase determinada e intentar construir una instancia de dicha clase utilizando un tipo de valor al que no puede aplicar una conversión boxing implícitamente.

Para corregir este error

  • Una solución es volver a definir la estructura como clase.

Ejemplo

El ejemplo siguiente genera el error CS0315:

// cs0315.cs
public class ClassConstraint { }
public struct ViolateClassConstraint { }

public class Gen<T> where T : ClassConstraint
{       
}
public class Test
{
    public static int Main()
    {
        Gen<ViolateClassConstraint> g = new Gen<ViolateClassConstraint>(); //CS0315
        return 1;
    }
}

Vea también

Referencia

Restricciones de tipos de parámetros (Guía de programación de C#)

Conversión boxing y unboxing (Guía de programación de C#)