Question Obtenir la valeur int de enum en C #


J'ai une classe appelée Questions (pluriel). Dans cette classe il y a un enum appelé Question (singulier) qui ressemble à ceci.

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

dans le Questions classe, j'ai un get(int foo) fonction qui renvoie un Questions objet pour cela foo. Y at-il un moyen facile d'obtenir la valeur entière de l'énumération afin que je puisse faire quelque chose comme Questions.Get(Question.Role)?


1367
2018-06-03 06:46


origine


Réponses:


Il suffit de lancer l'énumération, par exemple

int something = (int) Question.Role;

Ce qui précède fonctionnera pour la grande majorité des énumérations que vous voyez dans la nature, car le type sous-jacent par défaut pour une énumération est int.

Cependant, comme cecilphillip souligne, enums peuvent avoir différents types sous-jacents. Si une énumération est déclarée comme uint, long, ou ulong, il devrait être moulé au type de l'enum; par exemple. pour

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

Tu devrais utiliser

long something = (long)StarsInMilkyWay.Wolf424B;

1795
2018-06-03 06:49



Depuis Enums peut être tout type intégral (byte, int, short, etc.), une façon plus robuste d'obtenir la valeur intégrale sous-jacente de l'énumération serait d'utiliser le GetTypeCode méthode en conjonction avec le Convert classe:

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

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

Cela devrait fonctionner quel que soit le type intégral sous-jacent.


237
2017-07-09 14:54



Déclarez-le comme une classe statique ayant des constantes publiques:

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;
}

Et puis vous pouvez le référencer comme Question.Role, et il évalue toujours à un int ou tout ce que vous définissez comme.


162
2018-06-15 19:28



Question question = Question.Role;
int value = (int) question;

Aura pour résultat value == 2.


72
2018-06-03 06:48



Sur une note connexe, si vous voulez obtenir le int valeur de System.Enum, puis donné e ici:

Enum e = Question.Role;

Vous pouvez utiliser:

int i = Convert.ToInt32(e);
int i = (int)(object)e;
int i = (int)Enum.Parse(e.GetType(), e.ToString());
int i = (int)Enum.ToObject(e.GetType(), e);

Les deux derniers sont carrément laids. Je préfère le premier.


54
2017-12-01 08:47



C'est plus facile que vous ne le pensez - une énumération est déjà int. Il a juste besoin d'être rappelé:

int y = (int)Question.Role;
Console.WriteLine(y); // prints 2

30
2018-06-03 06:51



Exemple:

Public Enum EmpNo
{
    Raj = 1
    Rahul,
    Priyanka
}

Et dans le code derrière pour obtenir une valeur enum:

int setempNo = (int)EmpNo.Raj; //This will give setempNo = 1

ou

int setempNo = (int)EmpNo.Rahul; //This will give setempNo = 2

Les énumérations seront incrémentées de 1 et vous pourrez définir la valeur de départ. Sinon, il sera affecté initialement à 0.


22
2017-09-25 10:43