Leer en inglés

Compartir a través de


Error del compilador CS0312

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 'type1' no cumple la restricción de 'type2'.

Un tipo de valor que acepta valores NULL es distinto de su homólogo que no acepta valores NULL; no existe una conversión de referencia implícita ni conversión de identificación entre ellos. 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 un Nullable<int> y el segundo parámetro de tipo es un System.Int32.

Para corregir este error

  1. Quite la restricción.

  2. En el ejemplo siguiente, el segundo argumento de tipo es int? o object.

Ejemplo

El código siguiente genera CS0312:

C#
// cs0312.cs  
class Program  
{  
    static void MTyVar<T, U>() where T : U { }  
  
    static int Main()  
    {  
        MTyVar<int?, int>(); // CS0312  
        return 1;  
    }  
}  

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

Consulte también