Obtener valor int de enumeración en C#

Resuelto jim asked hace 15 años • 31 respuestas

Tengo una clase llamada Questions(plural). En esta clase hay una enumeración llamada Question(singular) que se parece a esto.

public enum Question
{
    Role = 2,
    ProjectFunding = 3,
    TotalEmployee = 4,
    NumberOfServers = 5,
    TopBusinessConcern = 6
}

En la Questionsclase tengo una get(int foo)función que devuelve un Questionsobjeto para eso foo. ¿Existe una manera fácil de obtener el valor entero de la enumeración para poder hacer algo como esto Questions.Get(Question.Role)?

jim avatar Jun 03 '09 13:06 jim
Aceptado

Simplemente lanza la enumeración, por ejemplo

int something = (int) Question.Role;

Lo anterior funcionará para la gran mayoría de enumeraciones que ve en el mercado, ya que el tipo subyacente predeterminado para una enumeración es int.

Sin embargo, como señala cecilphillip , las enumeraciones pueden tener diferentes tipos subyacentes. Si una enumeración se declara como uint, longo ulong, se debe convertir al tipo de enumeración; por ejemplo para

enum StarsInMilkyWay:long {Sun = 1, V645Centauri = 2 .. Wolf424B = 2147483649};

Deberías usar

long something = (long)StarsInMilkyWay.Wolf424B;
Tetraneutron avatar Jun 03 '2009 06:06 Tetraneutron

Dado que las enumeraciones pueden ser de cualquier tipo integral ( ,,, byteetc. ), una forma más sólida de obtener el valor integral subyacente de la enumeración sería utilizar el método junto con la clase:intshortGetTypeCodeConvert

enum Sides {
    Left, Right, Top, Bottom
}
Sides side = Sides.Bottom;

object val = Convert.ChangeType(side, side.GetTypeCode());
Console.WriteLine(val);

Esto debería funcionar independientemente del tipo integral subyacente.

cecilphillip avatar Jul 09 '2010 14:07 cecilphillip

Declarelo como una clase estática que tiene constantes públicas:

public static class Question
{
    public const int Role = 2;
    public const int ProjectFunding = 3;
    public const int TotalEmployee = 4;
    public const int NumberOfServers = 5;
    public const int TopBusinessConcern = 6;
}

Y luego puede hacer referencia a él como Question.Roley siempre se evalúa como into como lo defina.

PablosBicicleta avatar Jun 15 '2012 19:06 PablosBicicleta