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
.
Usando o código a seguir como exemplo, uma solução é especificar o argumento comum
ImplStruct
como o primeiro argumento de tipo na chamada aTestMethod
. Em seguida, modifiqueTestMethod
para criar uma versão anulável deImplstruct
na instrução de retorno dele:C#return new Nullable<T>(t);
O seguinte código gera o erro 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()
{ }
}
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: