2011-06-02 78 views
35

En C, enums, internamente equivale a un número entero. Por lo tanto, podemos tratar los tipos de datos de enum como un número entero también.Cómo obtener el valor del índice Enum en C#

¿Cómo lograr lo mismo con C#?

+0

duplicado: http://stackoverflow.com/questions/29482/cast-int-to-enum-in- c (ah, y enum to int es solo un yeso como otro respondió) – Dmitry

+0

@Dmitry: Parece que la otra publicación es en realidad la inversa :) –

Respuesta

50

simplemente echarlo a un int, como a continuación:

int eValue = (int)enumValue; 

Aquí hay otro ejemplo que muestra cómo configurar sus valores enteros internos:

public enum MyEnum 
{ 
    MyValue1 = 1, 
    MyValue2 = 2 
} 

(int)MyEnum.MyValue2 == 2; // True 
1

Utilice un reparto:

public enum MyEnum : int { 
    A = 0, 
    B = 1, 
    AB = 2, 
} 


int val = (int)MyEnum.A; 
0
using System; 
public class EnumTest 
{ 
    enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; 

    static void Main() 
    { 

     int x = (int)Days.Sun; 
     int y = (int)Days.Fri; 
     Console.WriteLine("Sun = {0}", x); 
     Console.WriteLine("Fri = {0}", y); 
    } 
} 
8

Por defecto, el tipo subyacente de cada elemento en la enumeración es entero.

enum Values 
{ 
    A, 
    B, 
    C 
} 

También puede especificar valor personalizado para cada elemento:

enum Values 
{ 
    A = 10, 
    B = 11, 
    C = 12 
} 
int x = (int)Values.A; // x will be 10; 

Nota: Por defecto, la primera empadronador tiene el valor 0.

20

Otra manera de convertir una enumeración de tipo de 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 de enumeración.

+0

Esta es una respuesta mejor que la aceptada (o las muchas otras respuestas similares) desde todos parecen suponer que sus valores enum están asignados con valores numéricos secuenciales y que a menudo eso no es el caso. –

1

Puede convertir directamente:

enum MyMonth { January = 1, February, March, April, May, June, July, August, September, October, November, December }; 

public static string MyMonthList(int MonthIndex) 
{ 
    MyMonth MonthName = (MyMonth)MonthIndex; 
    return MonthName.ToString(); 
} 

Por ejemplo:

string MySelectedMonthName=MyMonthList(12); 
//then MySelectedMonthName value will be August. 
Cuestiones relacionadas