CS0311 de erro do compilador

Mensagem de erro

O tipo de 'tipo' não pode ser usado sistema autônomo parâmetro de tipo ' t ' no tipo genérico ou método '<nome>'.Não há nenhuma conversão de referência implícita de 'tipo' para 'type2'.

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

Para corrigir este erro

  1. Altere o argumento que você está usando para criar a classe.

  2. Se você possui a classe, pode remover a restrição ou que faça algo para permitir que uma referência implícita ou conversão de identidade.Por exemplo, você pode fazer o segundo tipo herdam o 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
    }
}

Se este erro ocorre ao tentar usar um argumento de tipo de valor, observe que uma conversão implícita numérica, por exemplo, de short para int, não satisfaz um parâmetro de tipo genérico.

Consulte também

Referência

Restrições em parâmetros de tipo (Guia de programação C#)