Просто отметив, что это действительный, проверяемый IL (т.е.
.class public sequential ansi sealed StructNewStruct`1<valuetype .ctor ([mscorlib]System.ValueType) T>
extends [mscorlib]System.ValueType
компилируется, как и простой
.class public sequential ansi sealed StructNewStruct`1<valuetype .ctor T>
extends [mscorlib]System.ValueType
), но у меня пока нет кода, который бы делал что-то другое для этого, что обеспечивает простой where T:struct
(или (Of T As Structure)
в VB.NET и <valuetype T>
в IL).
В частности, структуры Nullable
уже не допускаются ни для какого общего аргумента с простым ограничением struct
. (Кажется, Nullable
объекты являются классами почти для всех целей, кроме хранения.)
Итак, в итоге, текущий Nullable<T>
(эквивалент) where T:ValueType, struct, new()
в настоящее время, похоже, идентичен where T:struct
.
Для вашей информации я использовал мой обновленный DotLisp, который позволяет создавать универсальные типы (просто используя MakeGenericType
), чтобы попытаться создать тип StructNewStruct<t>
и StructStruct<t>
(*) для все вводит во всех сборках 4.0 Framework, которые загружаются без меня, пытаясь загрузить "необычные" сборки (например, System.Web
, возможно, не были загружены). (Если есть какие-либо «специальные» типы в «неясных» сборках фреймворка, дайте мне знать, и я буду следить за тем, чтобы они были загружены и опробованы.) Все типы успешно или с ошибками одинаковы для обеих структур.
(*) StructStruct<T> where T:struct