Frage Erhalten Sie int-Wert von enum in C #


Ich habe eine Klasse namens Questions (Plural). In dieser Klasse gibt es ein Enum namens Question (Einzahl), die so aussieht.

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

In dem Questions Klasse, ich habe eine get(int foo) Funktion, die a zurückgibt Questions Objekt dafür foo. Gibt es eine einfache Möglichkeit, den Integer-Wert aus der Enumeration zu erhalten, damit ich etwas tun kann Questions.Get(Question.Role)?


1367
2018-06-03 06:46


Ursprung


Antworten:


Werfen Sie einfach das Enum, z.

int something = (int) Question.Role;

Das oben Gesagte funktioniert für die überwiegende Mehrheit der Enums, die Sie in der freien Wildbahn sehen, da der Standardtyp für ein Enum ist int.

Allerdings da Cecilphillip weist darauf hin, dass Enums unterschiedliche zugrunde liegende Typen haben können. Wenn eine Aufzählung als a deklariert ist uint, long, oder ulong, sollte es auf den Typ der Enum gegossen werden; z.B. zum

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

du solltest benutzen

long something = (long)StarsInMilkyWay.Wolf424B;

1795
2018-06-03 06:49



Da Enums ein ganzzahliger Typ sein kann (byte, int, shortusw.), wäre eine robustere Methode, den zugrundeliegenden Integralwert des Enums zu erhalten, den GetTypeCode Methode in Verbindung mit der Convert Klasse:

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

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

Dies sollte unabhängig vom zugrunde liegenden Integraltyp funktionieren.


237
2017-07-09 14:54



Deklarieren Sie es als eine statische Klasse mit öffentlichen Konstanten:

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

Und dann können Sie es als verweisen Question.Roleund es wird immer zu einem ausgewertet int oder wie immer du es definierst.


162
2018-06-15 19:28



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

Wird darin enden, dass value == 2.


72
2018-06-03 06:48



Auf eine verwandte Anmerkung, wenn Sie die int Wert von System.Enumdann gegeben e Hier:

Enum e = Question.Role;

Sie können verwenden:

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

Die letzten beiden sind einfach hässlich. Ich bevorzuge die erste.


54
2017-12-01 08:47



Es ist einfacher als du denkst - ein Enum ist schon ein Int. Es muss nur daran erinnert werden:

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

30
2018-06-03 06:51



Beispiel:

Public Enum EmpNo
{
    Raj = 1
    Rahul,
    Priyanka
}

Und im Code dahinter, um enum Wert zu bekommen:

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

oder

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

Enums werden um 1 erhöht und Sie können den Startwert festlegen. Andernfalls wird es zunächst als 0 zugewiesen.


22
2017-09-25 10:43