getnames getname example espaƱol enum description convertir convert c# enums

getname - C#int a enum conversion



enum.getnames c# example (5)

Posible duplicado:
Emitir int a enum en C #

Si tengo el siguiente código:

enum foo : int { option1 = 1, option2, ... } private foo convertIntToFoo(int value) { // Convert int to respective Foo value or throw exception }

¿Cómo se vería el código de conversión?


Está bien simplemente enviar tu int a Foo:

int i = 1; Foo f = (Foo)i;

Si intentas lanzar un valor que no está definido, seguirá funcionando. El único daño que puede venir de esto es en cómo usa el valor más adelante.

Si realmente desea asegurarse de que su valor esté definido en la enumeración, puede usar Enum.IsDefined:

int i = 1; if (Enum.IsDefined(typeof(Foo), i)) { Foo f = (Foo)i; } else { // Throw exception, etc. }

Sin embargo, usar IsDefined cuesta más que simplemente lanzar. Cuál usted utiliza depende de su implementación. Puede considerar restringir la entrada del usuario o manejar un caso predeterminado cuando usa la enumeración.

También tenga en cuenta que no tiene que especificar que su enumeración hereda de int; Este es el comportamiento predeterminado.


Estoy bastante seguro de que puedes hacer un casting explícito aquí.

foo f = (foo)value;

Siempre y cuando diga que la enumeración hereda (?) De int, que tiene.

enum foo : int

EDITAR Sí resulta que, por defecto, un tipo subyacente de enums es int. Sin embargo, puede usar cualquier tipo integral, excepto char.

También puedes convertir desde un valor que no está en la enumeración, produciendo una enumeración inválida. Sospecho que esto funciona simplemente cambiando el tipo de referencia y no cambiando realmente el valor en la memoria.

enum (referencia de C #)
Tipos de enumeración (Guía de programación C #)


if (Enum.IsDefined(typeof(foo), value)) { return (Foo)Enum.Parse(typeof(foo), value); }

Espero que esto ayude

Editar Esta respuesta bajó votada como valor en mi ejemplo es una cadena, donde como la pregunta solicitó una int. Mis aplicaciones el siguiente debería ser un poco más claro :-)

Type fooType = typeof(foo); if (Enum.IsDefined(fooType , value.ToString())) { return (Foo)Enum.Parse(fooType , value.ToString()); }


No necesitas la herencia. Tu puedes hacer:

(Foo)1

funcionará ;)


Casting debería ser suficiente. Si está utilizando C # 3.0 puede hacer un método de extensión útil para analizar los valores enum:

public static TEnum ToEnum<TInput, TEnum>(this TInput value) { Type type = typeof(TEnum); if (value == default(TInput)) { throw new ArgumentException("Value is null or empty.", "value"); } if (!type.IsEnum) { throw new ArgumentException("Enum expected.", "TEnum"); } return (TEnum)Enum.Parse(type, value.ToString(), true); }