Ошибка компилятора CS0313
Тип "тип1" нельзя использовать в качестве параметра типа "имя параметра" в универсальном типе или методе "тип2". Допускающий значение null тип "тип1" не удовлетворяет ограничению типа "тип2". Допускающие значение NULL типы не могу отвечать никаким ограничениям интерфейса.
Тип значения, допускающего значение NULL, не эквивалентен его ненулевому аналогу. В представленном ниже примере структура ImplStruct
удовлетворяет ограничению BaseInterface
, однако структура ImplStruct?
этому ограничению не удовлетворяет, так как метод Nullable<ImplStruct>
не реализует интерфейс BaseInterface
.
Одно из решений показано в представленном ниже примере кода: определите обычную структуру
ImplStruct
в качестве первого аргумента типа в вызове методаTestMethod
. Затем измените методTestMethod
, чтобы создать допускающую значение NULL версию структурыImplstruct
в его операторе return.C#return new Nullable<T>(t);
Следующий код приводит к возникновению ошибки 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()
{ }
}
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: