Error del compilador CS0313
El tipo 'type1' no se puede usar como parámetro de tipo 'parameter name' en el tipo o método genéricos 'type2'. El tipo que acepta valores NULL 'type1' no cumple la restricción de 'type2'. Los tipos que aceptan valores NULL no cumplen las restricciones de interfaz.
Un tipo de valor que acepte valores NULL no es equivalente a su homólogo que no acepte valores NULL. En el ejemplo siguiente, ImplStruct
cumple la restricción BaseInterface
, pero ImplStruct?
no la cumple porque Nullable<ImplStruct>
no implementa BaseInterface
.
Con el código siguiente como ejemplo, una solución consiste en especificar un elemento
ImplStruct
normal como el primer argumento de tipo en la llamada aTestMethod
. Después, modifiqueTestMethod
para crear una versión que acepta valores NULL deImplstruct
en su instrucción return:C#return new Nullable<T>(t);
El código siguiente genera el error 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()
{ }
}
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: