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


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

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

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

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

Допускающие значение NULL типы отличаются от аналогичных типов, не допускающим этого значения; между ними не существует неявного преобразования ссылок или преобразования идентичности. Упаковка-преобразование, допускающая значение NULL, не удовлетворяет ограничению универсального типа. Первый параметр в следующем примере является Nullable<int>, а второй параметр — это System.Int32.

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

  1. Удалите ограничения.

  2. В следующем примере задайте для второго параметра тип int? или object.

Пример

Следующий код вызывает ошибку CS0312:

// cs0312.cs
class Program
{
    static void MTyVar<T, U>() where T : U { }

    static int Main()
    {
        MTyVar<int?, int>(); // CS0312
        return 1;
    }
}

Хотя допускающие значение NULL типы отличаются от аналогичных типов, не допускающим этого значения, допускаются различные типы преобразования обнуляемых и необнуляемых значений.

См. также

Ссылки

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