c# - примеры - switch enum java




C#7.3 Enum constraint: Почему я не могу использовать перечисление с нулевым значением? (2)

Вы можете, но вам нужно добавить еще одно ограничение: ограничение struct .

public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}

Теперь, когда у нас есть ограничение перечисления, почему компилятор не позволяет мне написать этот код?

public static TResult? ToEnum<TResult>(this String value, TResult? defaultValue)
    where TResult : Enum
{
    return String.IsNullOrEmpty(value) ? defaultValue : (TResult?)Enum.Parse(typeof(TResult), value);
}

Компилятор говорит:

Ошибка CS0453 Тип «TResult» должен быть невообразимым типом значения, чтобы использовать его как параметр «T» в родовом типе или методе «Nullable»


Поскольку System.Enum является классом, вы не можете объявить переменную типа Nullable<Enum> (поскольку Nullable<T> возможен только в том случае, если T является struct ).

Таким образом:

Enum? bob = null;

не будет компилироваться, и ваш код тоже не будет.

Это определенно странно (поскольку Enum сам по себе является классом, но определенный Enum который вы определяете в своем коде, является struct ), если вы раньше не сталкивались с ним, но это явно class (а не struct ) в соответствии с docs и исходный код.





c#-7.3