Ya no busques más por todo internet porque estás al sitio indicado, contamos con la respuesta que quieres recibir y sin liarte.
Solución:
En primer lugar, podría haber dos valores a los que te refieres:
Valor subyacente
Si está preguntando sobre el valor subyacente, que podría ser cualquiera de estos tipos: byte, sbyte, short, ushort, int, uint, long o ulong
Luego, simplemente puede convertirlo en su tipo subyacente. Suponiendo que es un int
puedes hacerlo así:
int eValue = (int)enumValue;
Sin embargo, también tenga en cuenta el valor predeterminado de cada elemento (el primer elemento es 0, el segundo es 1 y así sucesivamente) y el hecho de que a cada elemento se le podría haber asignado un nuevo valor, que puede no estar necesariamente en un orden particular. (Crédito a @JohnStock por el toque para aclarar).
Este ejemplo asigna a cada uno un nuevo valor y muestra el valor devuelto:
public enum MyEnum
MyValue1 = 34,
MyValue2 = 27
(int)MyEnum.MyValue2 == 27; // True
Valor de índice
El anterior es generalmente el valor requerido más comúnmente, y es lo que su pregunta sugiere que necesita, sin embargo, cada valor también tiene un valor de índice (al que se refiere en el título). Si necesita esto, consulte otras respuestas a continuación para obtener más detalles.
Otra forma de convertir un Enum-Type a un int:
enum E
A = 1, /* index 0 */
B = 2, /* index 1 */
C = 4, /* index 2 */
D = 4 /* index 3, duplicate use of 4 */
void Main()
E e = E.C;
int index = Array.IndexOf(Enum.GetValues(e.GetType()), e);
// index is 2
E f = (E)(Enum.GetValues(e.GetType())).GetValue(index);
// f is E.C
Más complejo pero independiente de los valores INT asignados a los valores enumerados.
De forma predeterminada, el tipo subyacente de cada elemento de la enumeración es entero.
enum Values
A,
B,
C
También puede especificar un valor personalizado para cada artículo:
enum Values
A = 10,
B = 11,
C = 12
int x = (int)Values.A; // x will be 10;
Nota: Por defecto, el primer enumerador tiene el valor 0.