Ler em inglês

Compartilhar via


Erro do Compilador CS0313

O tipo "type1" não pode ser usado como parâmetro de tipo "parameter name" no tipo genérico ou no método "type2". O tipo anulável "type1" não cumpre a restrição de "type2". Tipos anuláveis não podem atender a nenhuma restrição de interface.

Um tipo de valor anulável não é equivalente à contraparte não anulável dele. No exemplo a seguir, ImplStruct satisfaz a restrição BaseInterface,mas ImplStruct? não porque Nullable<ImplStruct> não implementa BaseInterface.

Para corrigir este erro

  1. Usando o código a seguir como exemplo, uma solução é especificar o argumento comum ImplStruct como o primeiro argumento de tipo na chamada a TestMethod. Em seguida, modifique TestMethod para criar uma versão anulável de Implstruct na instrução de retorno dele:

    C#
    return new Nullable<T>(t);  
    

Exemplo

O seguinte código gera o erro CS0313:

C#
// cs0313.cs  
public interface BaseInterface { }  
public struct ImplStruct : BaseInterface { }  
  
public class TestClass  
{  
    public T? TestMethod<T, U>(T t) where T : struct, U  
    {  
        return t;  
    }  
}  
  
public class NullableTest  
{  
    public static void Run()  
    {  
  
        TestClass tc = new TestClass();  
        tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313  
    }  
    public static void Main()  
    { }  
}  

Confira também