Я думаю, что это просто ошибка в документации.Если вы посмотрите на тип Nullable<T>
в Reflector или используете команду «Перейти к определению» в VS, он показывает только ограничение struct
.
EDIT
Я снова подумал об этом и провел небольшой тест:
var attributes = typeof(Nullable<>).GetGenericArguments()[0].GenericParameterAttributes;
Console.WriteLine(attributes);
Этот код выдает следующий вывод:
NotNullableValueTypeConstraint, DefaultConstructorConstraint
Таким образом, согласно рефлексии, T
в Nullable<T>
имеет ограничение new()
... Это означает, что, несмотря на то, что оно недопустимо в C #, оно должно быть действительным дляCLR.
Таким образом, документация является правильной и неправильной: это правда, что T
в Nullable<T>
имеет ограничение "конструктор по умолчанию", но объявление C #, которое оно показывает, является неправильным ...
Это на самом деле не очень удивительно, поскольку документация генерируется из метаданных сборки (и, конечно, комментариев XML).В генераторе документации должна быть ошибка ...