Błąd kompilatora CS0313
Nie można użyć typu "type1" jako parametru typu "nazwa parametru" w typie ogólnym lub metodzie "type2". Typ dopuszczalny wartości null "type1" nie spełnia ograniczenia "type2". Typy dopuszczane wartości null nie mogą spełniać żadnych ograniczeń interfejsu.
Typ wartości dopuszczanej do wartości null nie jest równoważny z jego odpowiednikiem, który nie jest dopuszczalny do wartości null. W poniższym przykładzie ograniczenie jest spełnione, ale ImplStruct?
nie dlatego, ImplStruct
że Nullable<ImplStruct>
nie implementuje BaseInterface
elementu .BaseInterface
Korzystając z poniższego kodu w przykładzie, jednym z rozwiązań jest określenie zwykłego
ImplStruct
argumentu jako pierwszego typu w wywołaniu metodyTestMethod
. Następnie zmodyfikujTestMethod
, aby utworzyć wersjęImplstruct
dopuszczaną do wartości null w instrukcji return:C#return new Nullable<T>(t);
Poniższy kod generuje 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()
{ }
}
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: