where T : System.ValueType?
There are two differences between using
where T : struct
and
where T : ValueType
T to be ValueType itself, which is a reference type.T to be a nullable value typeThe first of these differences is almost never what you want. The second could occasionally be useful; Nullable is slightly odd in that it satisfies neither the where T : struct nor where T : class constraint.
More useful would be the constraint
where T : struct, System.Enum
which is prohibited by C# for no good reason that I can tell. See my blog post and the Unconstrained Melody project for more on this.