Ограничение where T : struct
позволяет ограничить область допустимых параметров типа только набором типов значений (по сравнению с надмножеством типов, включающим как значения, так и ссылочные типы), но также, по-видимому, полностью запрещает типы, допускающие значение NULL, хотя значение NULL не обязательно означает ссылочный тип в современных версиях C#.
Что, если я хочу принять типы значений с добавленной возможностью обнуления, такие как int?
, DateTime?
и т. д., и отклонить ссылочные типы с изначально обнуляемыми значениями, такие как строка, IList и т. д.? Можно ли таким образом определить ограничения? Как, если это так?
Мне на самом деле любопытно научиться реализовывать оба сценария: когда тип, используемый в качестве параметра, должен быть как значением, так и обнуляемым, и когда должен быть принят тип значения, допускающий значение NULL, а также тип значения, не допускающий значение NULL, и я считаю, что это связано достаточно близко, чтобы простить упоминание обоих, поэтому я был бы признателен за скромный комментарий о втором случае и выбрал бы ответ, включающий его как лучший (учитывая, что другой ответ не будет действительно лучше в других отношениях), если будет более одного ответа отправлено, и мне придется выбирать, но на самом деле мне сейчас нужен первый случай (всегда требовать тип, который одновременно допускает значение NULL и является типом значения), и я также считаю, что второй случай будет быть довольно прямолинейным, учитывая знание первого, не говоря уже о том, что настаивать на склеивании двух вопросов в один - нехорошо, поэтому я буду очень признателен и приму ответ, касающийся только первого случая.