Прочитать на английском

Поделиться через


Ошибка компилятора CS0313

Тип "тип1" нельзя использовать в качестве параметра типа "имя параметра" в универсальном типе или методе "тип2". Допускающий значение null тип "тип1" не удовлетворяет ограничению типа "тип2". Допускающие значение NULL типы не могу отвечать никаким ограничениям интерфейса.

Тип значения, допускающего значение NULL, не эквивалентен его ненулевому аналогу. В представленном ниже примере структура ImplStruct удовлетворяет ограничению BaseInterface , однако структура ImplStruct? этому ограничению не удовлетворяет, так как метод Nullable<ImplStruct> не реализует интерфейс BaseInterface.

Исправление ошибки

  1. Одно из решений показано в представленном ниже примере кода: определите обычную структуру ImplStruct в качестве первого аргумента типа в вызове метода TestMethod. Затем измените метод TestMethod , чтобы создать допускающую значение NULL версию структуры Implstruct в его операторе return.

    C#
    return new Nullable<T>(t);  
    

Пример

Следующий код приводит к возникновению ошибки CS0313:

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

См. также