4393 Stimmen

Wie man eine Aufzählung durchführt

Wie können Sie eine Aufzählung von enum in C#?

Der folgende Code lässt sich z. B. nicht kompilieren:

public enum Suit
{
    Spades,
    Hearts,
    Clubs,
    Diamonds
}

public void EnumerateAllSuitsDemoMethod()
{
    foreach (Suit suit in Suit)
    {
        DoSomething(suit);
    }
}

Und es gibt den folgenden Kompilierzeitfehler:

Anzug" ist ein "Typ", wird aber wie eine "Variable" verwendet

Es scheitert an der Suit Schlüsselwort, das zweite.

24 Stimmen

6 Stimmen

Vielleicht möchten Sie sich informieren über die Besonderheiten von C#-Enums in dem dies und andere nützliche Informationen über Enum erörtert werden

6voto

reza akhlaghi Punkte 683

Um eine Liste von int aus einer Aufzählung zu erhalten, verwenden Sie Folgendes. Es funktioniert!

List<int> listEnumValues = new List<int>();
YourEnumType[] myEnumMembers = (YourEnumType[])Enum.GetValues(typeof(YourEnumType));
foreach ( YourEnumType enumMember in myEnumMembers)
{
    listEnumValues.Add(enumMember.GetHashCode());
}

5voto

Emily Chen Punkte 150

enum Typen werden "Aufzählungstypen" genannt, nicht weil sie Container sind, die Werte "aufzählen" (was sie nicht sind), sondern weil sie definiert sind durch Aufzählung die möglichen Werte für eine Variable dieses Typs.

(Eigentlich ist das ein bisschen komplizierter als das - Enum-Typen gelten als "zugrunde liegenden" Integer-Typ, was bedeutet, dass jeder Enum-Wert einem Integer-Wert entspricht (dies ist in der Regel implizit, kann aber manuell angegeben werden). C# wurde so entwickelt, dass man die Enum-Typen mit tout Ganzzahl dieses Typs in die Enum-Variable, auch wenn es sich nicht um einen "benannten" Wert handelt).

El System.Enum.GetNames-Methode kann verwendet werden, um ein Array von Strings abzurufen, die, wie der Name schon sagt, die Namen der Enum-Werte sind.

EDIT: Ich hätte vorschlagen sollen, die System.Enum.GetValues Methode an. Ups.

5voto

code4fun Punkte 29

Eine einfache Enum.GetNames( EnumType ) sollte funktionieren

4voto

marsh-wiggle Punkte 2065

Wenn Sie ein Bit-Enum wie dieses haben

enum DemoFlags
{
    DemoFlag = 1,
    OtherFlag = 2,
    TestFlag = 4,
    LastFlag = 8,
}

Mit dieser Abtretung

DemoFlags demoFlags = DemoFlags.DemoFlag | DemoFlags.TestFlag;

und benötigen ein Ergebnis wie dieses

"DemoFlag | TestFlag"

diese Methode hilft:

public static string ConvertToEnumString<T>(T enumToConvert, string separator = " | ") where T : Enum
{
    StringBuilder convertedEnums = new StringBuilder();

    foreach (T enumValue in Enum.GetValues(typeof(T)))
    {
        if (enumToConvert.HasFlag(enumValue)) convertedEnums.Append($"{ enumValue }{separator}");
    }

    if (convertedEnums.Length > 0) convertedEnums.Length -= separator.Length;

    return convertedEnums.ToString();
}

0 Stimmen

Oder Sie könnten die .Net-Konvention der Anwendung der [Flags] Attribut und die Verwendung von .ToString() auf den Wert. Die Trennzeichen sind Kommas anstelle von Pipes. Das ist: [Flags] enum DemoFlags { ... } //...; return demoFlags.ToString(); Aber das beantwortet nicht die Frage nach der Aufzählung der Werte.

3voto

rlv-dan Punkte 876

Wenn Sie haben:

enum Suit
{
   Spades,
   Hearts,
   Clubs,
   Diamonds
}

Dies:

foreach (var e in Enum.GetValues(typeof(Suit)))
{
    Console.WriteLine(e.ToString() + " = " + (int)e);
}

Wird ausgegeben:

Spades = 0
Hearts = 1
Clubs = 2
Diamonds = 3

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