A type can be substituted for the generic type parameter only if it is a value type and is not nullable.