2313 Stimmen

Int-Wert von enum in C# abrufen

Ich habe eine Klasse namens Questions (Plural). In dieser Klasse gibt es ein Enum namens Question (Singular), der wie folgt aussieht.

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

In der Questions Klasse habe ich eine get(int foo) Funktion, die eine Questions Objekt für dieses foo . Gibt es eine einfache Möglichkeit, den Integer-Wert aus dem Enum zu erhalten, so dass ich etwas wie dieses tun kann Questions.Get(Question.Role) ?

47 Stimmen

Für den umgekehrten Fall: guss-im-scharfen-um .

16 Stimmen

Ich weiß, dass ich zu spät dran bin, aber anstatt Ihre Methode wie folgt zu definieren get(int foo) können Sie sie definieren als get(Question foo) dann führen Sie das Casting innerhalb der Methode durch, dann können Sie Ihre Methode als Questions.Get(Question.Role)

1 Stimmen

Versuchen Sie dies: int int_Choose = (int) Question.Role;

2913voto

Tetraneutron Punkte 31021

Geben Sie einfach die Aufzählung ein, z. B.

int something = (int) Question.Role;

Die obige Vorgehensweise funktioniert für die große Mehrheit der Enums, die Sie in der freien Wildbahn sehen, da der standardmäßig zugrunde liegende Typ für ein Enum ist int .

Da jedoch cecilphillip weist darauf hin, dass Enums verschiedene zugrunde liegende Typen haben können. Wenn eine Enum als eine uint , long , oder ulong sollte er in den Typ der Aufzählung umgewandelt werden, z. B. für

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

sollten Sie

long something = (long)StarsInMilkyWay.Wolf424B;

378voto

cecilphillip Punkte 10981

Da Enums jeder ganzzahlige Typ sein können ( byte , int , short usw.), wäre ein robusterer Weg, um den zugrunde liegenden integralen Wert der Aufzählung zu erhalten, die Verwendung der Methode 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.

225voto

PablosBicicleta Punkte 2309

Deklarieren Sie sie als 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 referenzieren als Question.Role und wird immer zu einem int oder wie auch immer Sie es definieren.

121voto

nawfal Punkte 65966

In diesem Zusammenhang sei darauf hingewiesen, dass Sie, wenn Sie die int Wert von System.Enum dann 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 das erste.

111voto

jerryjvl Punkte 18807
Question question = Question.Role;
int value = (int) question;

Führt zu value == 2 .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X