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;

13voto

JaimeArmenta Punkte 139
int number = Question.Role.GetHashCode();

number sollte den Wert 2 .

12voto

Bronek Punkte 9976

Sie können dies tun, indem Sie eine Erweiterungsmethode zu Ihrem definierten Aufzählungstyp:

public static class MyExtensions
{
    public static int getNumberValue(this Question questionThis)
    {
        return (int)questionThis;
    }
}

Dies vereinfacht die Ermittlung des int-Wertes des aktuellen Enum-Wertes:

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

o

int value = Question.Role.getNumberValue();

12voto

Gauravsa Punkte 5797
public enum Suit : int
{
    Spades = 0,
    Hearts = 1,
    Clubs = 2,
    Diamonds = 3
}

Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));

// From int
Console.WriteLine((Suit)1);

// From a number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));

if (typeof(Suit).IsEnumDefined("Spades"))
{
    var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
    Console.Out.WriteLine("{0}", res);
}

6voto

Abrar Jahin Punkte 13034

Sie hätten verwenden sollen Typ Gießen wie wir sie in jeder anderen Sprache verwenden können.

Wenn Ihr enum ist wie folgt.

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

Und Sie müssen an eine int dann tun Sie dies.

Question q = Question.Role;
.............
.............
int something = (int) q;

Re-

In C# gibt es zwei Arten von Casting:

  • Implizites Casting ( automatisch ) - Konvertierung einer kleineren Schrift in eine größere Schriftgröße wie-

char -> int -> long -> float -> double

  • Explizites Casting ( manuell ) - Konvertierung einer größeren Schrift in eine kleinere Schrift wie-

double -> float -> long -> int -> char

Weitere Informationen finden Sie unter aquí .

6voto

Jeffrey Ferreiras Punkte 261

Da Enums mit mehreren primitiven Typen deklariert werden können, kann eine generische Erweiterungsmethode zum Casting beliebiger Enum-Typen nützlich sein.

enum Box
{
    HEIGHT,
    WIDTH,
    DEPTH
}

public static void UseEnum()
{
    int height = Box.HEIGHT.GetEnumValue<int>();
    int width = Box.WIDTH.GetEnumValue<int>();
    int depth = Box.DEPTH.GetEnumValue<int>();
}

public static T GetEnumValue<T>(this object e) => (T)e;

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