Obtener valor int de enumeración en C#
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 Questions
clase tengo una get(int foo)
función que devuelve un Questions
objeto 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)
?
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
, long
o 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;
Dado que las enumeraciones pueden ser de cualquier tipo integral ( ,,, byte
etc. ), 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:int
short
GetTypeCode
Convert
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.
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.Role
y siempre se evalúa como int
o como lo defina.