Now that we have enum constraint, why doesn\'t compiler allow me to write this code?
public static TResult? ToEnum(this String value, TResult?
You can, but you have to add another constraint: the struct constraint.
public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}
Because System.Enum is a class, you cannot declare a variable of type Nullable<Enum> (since Nullable<T> is only possible if T is a struct).
Thus:
Enum? bob = null;
won't compile, and neither will your code.
This is definitely strange (since Enum itself is a class, but a specific Enum that you define in your code is a struct) if you haven't run into it before, but it is clearly a class (not a struct) as per the docs and the source code.