Error del compilador CS0311
Actualización: noviembre 2007
Mensaje de error
El tipo 'tipo1' no se puede usar como parámetro de tipo 'T' en el tipo o método genérico '<nombre>'. No hay ninguna conversión de referencia implícita de 'tipo1' a 'tipo2'.
The type 'type1' cannot be used as type parameter 'T' in the generic type or method '<name>'. There is no implicit reference conversion from 'type1' to 'type2'.
Cuando se aplica una restricción a un parámetro de tipo genérico, debe existir una conversión de referencia o identidad implícita del argumento concreto al tipo de la restricción.
Para corregir este error
Cambie el argumento que está utilizando para crear la clase.
Si es el propietario de la clase, puede quitar la restricción o bien habilitar una conversión de identidad o referencia implícita de alguna forma. Por ejemplo, puede hacer que el segundo tipo herede del primero.
Ejemplo
// cs0311.cs
class B{}
class C{}
class Test<T> where T : C
{ }
class Program
{
static void Main()
{
Test<B> test = new Test<B>(); //CS0311
}
}
Si este error se produce al intentar utilizar un argumento de tipo de valor, tenga en cuenta que una conversión numérica implícita, por ejemplo de short a int, no satisface un parámetro de tipo genérico.
Vea también
Referencia
Restricciones de tipos de parámetros (Guía de programación de C#)