Erro do Compilador CS0311

O tipo 'type1' não pode ser usado como parâmetro de tipo 'T' no tipo ou método genérico '<name>'. Não há nenhuma conversão de referência implícita de 'type1' para 'type2'.

Quando uma restrição é aplicada a um parâmetro de tipo genérico, uma conversão implícita de identidade ou referência deve existir do argumento concreto para o tipo de restrição.

Para corrigir este erro

  1. Altere o argumento usado para criar a classe.

  2. Se você for o proprietário da classe, será possível remover a restrição ou fazer algo para habilitar uma referência implícita ou conversão de identidade. Por exemplo, é possível fazer com que o segundo tipo herde do primeiro.

Exemplo

// cs0311.cs  
class B {}  
class C {}  
class Test<T> where T : C  
{ }  
  
class Program  
{  
    static void Main()  
    {  
        Test<B> test = new Test<B>(); //CS0311  
    }  
}  

Caso esse erro ocorra ao tentar usar um argumento de tipo de valor, observe que uma conversão numérica implícita, por exemplo, de short para int, não atende a um parâmetro de tipo genérico.

Confira também