ejemplos - enum to list c#
C#7.3 Restricción de Enum: ¿Por qué no puedo usar la enumeración nullable? (2)
Ahora que tenemos una restricción enum, ¿por qué el compilador no me permite escribir este código?
public static TResult? ToEnum<TResult>(this String value, TResult? defaultValue)
where TResult : Enum
{
return String.IsNullOrEmpty(value) ? defaultValue : (TResult?)Enum.Parse(typeof(TResult), value);
}
El compilador dice:
Error CS0453 El tipo ''TResult'' debe ser un tipo de valor que no admite nulos para usarlo como parámetro ''T'' en el tipo genérico o método ''Nullable''
Como System.Enum
es una clase, no puede declarar una variable de tipo Nullable<Enum>
(ya que Nullable<T>
solo es posible si T
es una struct
).
Así:
Enum? bob = null;
no se compilará, ni tampoco su código.
Esto es definitivamente extraño (ya que Enum
mismo es una clase, pero un Enum
específico que usted define en su código es una struct
) si no se ha encontrado antes, pero claramente es una class
(no una struct
) según el docs y el código fuente.
Puede, pero debe agregar otra restricción: la restricción struct
.
public static void DoSomething<T>(T? defaultValue) where T : struct, Enum
{
}