3898 Stimmen

Wie kann ich int in enum umwandeln?

Wie kann ein int an eine enum in C#?

47voto

Evan M Punkte 2415

Wenn Sie eine Ganzzahl haben, die als Bitmaske fungiert und einen oder mehrere Werte in einer [Flags]-Aufzählung darstellen könnte, können Sie diesen Code verwenden, um die einzelnen Flag-Werte in eine Liste zu zerlegen:

for (var flagIterator = 0; flagIterator < 32; flagIterator++)
{
    // Determine the bit value (1,2,4,...,Int32.MinValue)
    int bitValue = 1 << flagIterator;

    // Check to see if the current flag exists in the bit mask
    if ((intValue & bitValue) != 0)
    {
        // If the current flag exists in the enumeration, then we can add that value to the list
        // if the enumeration has that flag defined
        if (Enum.IsDefined(typeof(MyEnum), bitValue))
            Console.WriteLine((MyEnum)bitValue);
    }
}

Beachten Sie, dass dies voraussetzt, dass der zugrunde liegende Typ der enum ist eine 32-Bit-Ganzzahl mit Vorzeichen. Wenn es sich um einen anderen numerischen Typ handeln würde, müssten Sie die hartkodierten 32 ändern, um die Bits in diesem Typ widerzuspiegeln (oder sie programmatisch ableiten mit Enum.GetUnderlyingType() )

36voto

Dies ist eine sichere Konvertierungsmethode mit Aufzählung von Flaggen:

public static bool TryConvertToEnum<T>(this int instance, out T result)
  where T: Enum
{
  var enumType = typeof (T);
  var success = Enum.IsDefined(enumType, instance);
  if (success)
  {
    result = (T)Enum.ToObject(enumType, instance);
  }
  else
  {
    result = default(T);
  }
  return success;
}

3 Stimmen

Dies kann nun mit C# 7.3 verbessert werden, indem man sich auf Enum anstelle von struct Das heißt, wir müssen uns nicht auf die Laufzeitprüfung verlassen!

25voto

Ted Punkte 2415

Ich komme ein wenig von der ursprünglichen Frage ab, aber ich fand eine Antwort auf eine Stack Overflow-Frage Int-Wert aus Enum abrufen nützlich. Erstellen Sie eine statische Klasse mit public const int Eigenschaften, die es Ihnen ermöglichen, auf einfache Weise eine Reihe von verwandten int Konstanten und müssen sie dann nicht mehr in int wenn man sie benutzt.

public static class Question
{
    public static readonly int Role = 2;
    public static readonly int ProjectFunding = 3;
    public static readonly int TotalEmployee = 4;
    public static readonly int NumberOfServers = 5;
    public static readonly int TopBusinessConcern = 6;
}

Natürlich wird ein Teil der Enum-Typ-Funktionalität verloren gehen, aber für die Speicherung einer Reihe von Datenbank-id-Konstanten scheint es eine ziemlich saubere Lösung zu sein.

5 Stimmen

Enums haben die Verwendung von Integer-Konstanten wie dieser abgelöst, da sie mehr Typsicherheit bieten

1 Stimmen

Paul, dies ist eine Methode, um verwandte int-Konstanten (z.B. Datenbank-id-Konstanten) zu sammeln, so dass sie direkt verwendet werden können, ohne dass sie jedes Mal in int umgewandelt werden müssen, wenn sie verwendet werden. Ihr Typ ist Ganzzahl, nicht zum Beispiel DatabaseIdsEnum.

1 Stimmen

Es gibt mindestens eine Situation, die ich gefunden habe, in der die Sicherheit von Enum-Typen ungewollt umgangen werden kann.

25voto

Shivprasad Koirala Punkte 25296

enter image description here

Um einen String in eine ENUM- oder int-Konstante zu konvertieren, müssen wir die Funktion Enum.Parse verwenden. Hier ist ein youtube Video https://www.youtube.com/watch?v=4nhx4VwdRDk die eigentlich mit string demonstriert wird, und dasselbe gilt für int.

Der Code sieht wie folgt aus: "red" ist die Zeichenkette und "MyColors" ist die Farb-ENUM, die die Farbkonstanten enthält.

MyColors EnumColors = (MyColors)Enum.Parse(typeof(MyColors), "Red");

24voto

Kamran Shahid Punkte 3596

Die folgende Methode ist eine etwas bessere Erweiterung:

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

1 Stimmen

Dies ist eigentlich viel besser, denn wenn der int-Wert nicht ein definierter Eintrag in der Enum ist, können Sie eine else-Anweisung verwenden, um enumString auf einen Standardwert zu setzen. Danke

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