Ответ 1
Nullable<T>
является struct
(см. MSDN), однако это единственный struct
, который не удовлетворяет struct
. Поэтому при использовании ограничений class
или struct
нельзя использовать параметр Nullable
в качестве параметра общего типа.
Nullable<T>
- это не просто структура с некоторым синтаксическим сахаром. Он имеет особую поддержку в CLR для некоторых своих действий. Например, он имеет особое поведение в боксе. В частности, значение nullable никогда не помещается в коробку. Базовое значение в коробке. Если nullable - это нулевое значение (HasValue - false), то оно преобразуется в нулевую ссылку. Кроме того, операторы преобразования для любых Nullable<T>
до Nullable<U>
снимаются с преобразований от T
до U
. Эти функции вы не сможете реализовать в .NET 1.0/1.1.