2392 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) ?

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

5voto

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í .

5voto

Grx70 Punkte 9591

Die einfachste Lösung, die mir einfällt, ist das Überladen der Get(int) Methode wie folgt:

[modifiers] Questions Get(Question q)
{
    return Get((int)q);
}

donde [modifiers] kann im Allgemeinen gleich sein wie bei der Get(int) Methode. Wenn Sie die Methode nicht bearbeiten können Questions Klasse oder aus irgendeinem Grund nicht wollen, können Sie die Methode überladen, indem Sie eine Erweiterung schreiben:

public static class Extensions
{
    public static Questions Get(this Questions qs, Question q)
    {
        return qs.Get((int)q);
    }
}

5voto

Erik Karlsson Punkte 480

Mein Lieblings-Hack mit int oder kleineren Enums:

GetHashCode();

Für eine Aufzählung

public enum Test
{
    Min = Int32.MinValue,
    One = 1,
    Max = Int32.MaxValue,
}

Dies,

var values = Enum.GetValues(typeof(Test));

foreach (var val in values)
{
    Console.WriteLine(val.GetHashCode());
    Console.WriteLine(((int)val));
    Console.WriteLine(val);
}

Ausgänge

one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648

Haftungsausschluss:

Es funktioniert nicht für Enums, die auf long basieren.

3voto

Kamran Shahid Punkte 3596

Nachfolgend ist die Erweiterungsmethode beschrieben

public static string ToEnumString<TEnum>(this int enumValue)
{
    var enumString = enumValue.ToString();
    if (Enum.IsDefined(typeof(TEnum), enumValue))
    {
        enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
    }
    return enumString;
}

3voto

Nalan Madheswaran Punkte 9100

Versuchen Sie dies anstelle von convert enum to int:

public static class ReturnType
{
    public static readonly int Success = 1;
    public static readonly int Duplicate = 2;
    public static readonly int Error = -1;        
}

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