CS0313 de erro do compilador

Mensagem de erro

O tipo de 'tipo' não pode ser usado sistema autônomo o nome do parâmetro de tipo' parâmetros' na genéricas tipo ou método 'type2'.O tipo que permite valor nulo 'tipo' não satisfaz a restrição de 'type2'.Tipos anuláveis não podem satisfazer as restrições de interface.

Um tipo que permite valor nulo não é equivalente à sua contraparte não anulável.No exemplo a seguir, ImplStruct satisfaça a BaseInterface restrição mas ImplStruct? faz não porque Nullable<ImplStruct> não implementa BaseInterface.

Para corrigir este erro

  • Usando o código a seguir sistema autônomo exemplo, uma solução é especificar um comum ImplStruct sistema autônomo o primeiro argumento de tipo na telefonar para TestMethod. Em seguida, modifique TestMethod Para criar uma versão anulável Implstruct em sua demonstrativo return:

    return new Nullable<T>(t);
    

Exemplo

O código a seguir gera CS0313:

// 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()
    { }
}

Consulte também

Referência

Tipos anuláveis (guia de programação C#)