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