Ler em inglês

Compartilhar via


Erro do Compilador CS0312

O tipo 'type1' não pode ser usado como parâmetro de tipo 'name' no tipo genérico ou método 'name'. O tipo anulável 'type1' não cumpre a restrição de 'type2'.

Um tipo de valor anulável é distinto de seu equivalente não anulável; não existe conversão de referência implícita ou de identificação entre eles. Uma conversão boxing anulável não cumpre uma restrição de tipo genérico. No exemplo a seguir, o primeiro parâmetro de tipo é Nullable<int> e o segundo, System.Int32.

Para corrigir este erro

  1. Remova a restrição.

  2. No exemplo a seguir, torne o segundo argumento de tipo int? ou object.

Exemplo

O código a seguir gera o erro CS0312:

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

Embora um tipo de valor anulável seja distinto do tipo não anulável, vários tipos de conversões são permitidos entre valores anuláveis e não anuláveis.

Confira também