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


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

Обновлен: Ноябрь 2007

Сообщение об ошибке

Тип "тип1" не может быть использован как параметр-тип "имя параметра" в универсальном типе или методе "тип2". Допускающий значение NULL тип "тип1" не удовлетворяет ограничению "тип2". Допускающие значение NULL типы не могу отвечать никаким ограничениям интерфейса.
The type 'type1' cannot be used as type parameter 'parameter name' in the generic type or method 'type2'. The nullable type 'type1' does not satisfy the constraint of 'type2'. Nullable types cannot satisfy any interface constraints.

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

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

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

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

См. также

Ссылки

Типы, допускающие значения NULL (руководство по программированию на C#)