Существует два различия между использованием
where T : struct
и
where T : ValueType
- последний позволит
T
быть ValueType
, что является ссылочным типом.
- последнее также позволило бы
T
быть типом значения, допускающим значение NULL *
Первое из этих различий почти никогда не соответствует вашим ожиданиям. Второй может иногда быть полезным; Nullable<T>
немного странно в том смысле, что не удовлетворяет ни ограничениям where T : struct
, ни where T : class
.
Более полезным было бы ограничение
where T : struct, System.Enum
, что запрещено C # без веской причины, которую я могу сказать. Подробнее см. в моем блоге и проекте Мелодия .