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;

5voto

Vivek Punkte 117

Das Beispiel, das ich vorschlagen möchte, um einen 'int'-Wert aus einer Aufzählung zu erhalten, lautet

public enum Sample
{
    Book = 1, 
    Pen = 2, 
    Pencil = 3
}

int answer = (int)Sample.Book;

Jetzt lautet die Antwort 1.

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.

4voto

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

4voto

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