Ler em inglês

Partilhar via


Erro do compilador CS0312

O tipo «tipo1» não pode ser utilizado como parâmetro de tipo «nome» no tipo genérico ou método «nome». O tipo anulável «tipo1» não satisfaz a restrição de «tipo2».

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

Para corrigir este erro

  1. Remova a restrição.

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

Exemplo

O código a seguir gera 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 de um tipo não anulável, vários tipos de conversões são permitidos entre valores anuláveis e não anuláveis.

Consulte também