Error del compilador CS0312

Actualización: noviembre 2007

Mensaje de error

El tipo 'tipo1' no se puede usar como parámetro de tipo 'nombre' en el tipo o método genérico 'nombre'. El tipo que acepta valores NULL 'tipo1' no cumple la restricción de '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 que acepta valores NULL es distinto de su homólogo que no acepta valores NULL; no existe entre ellos ninguna conversión de referencia o de identificación implícita. Una conversión boxing que acepta valores NULL no satisface una restricción de tipo genérico. En el ejemplo siguiente, el primer parámetro de tipo es Nullable<int> y el segundo parámetro de tipo es System.Int32.

Para corregir este error

  1. Quite la restricción.

  2. En el ejemplo siguiente, convierta el segundo argumento de tipo en int? u object.

Ejemplo

El código siguiente genera el error CS0312:

// cs0312.cs
class Program
{
    static void MTyVar<T, U>() where T : U { }

    static int Main()
    {
        MTyVar<int?, int>(); // CS0312
        return 1;
    }
}

Aunque un tipo que acepta valores NULL es distinto de uno que no los acepta, se permiten varios tipos de conversiones entre estos tipos de valores.

Vea también

Referencia

Tipos que aceptan valores NULL (Guía de programación de C#)