Wie kann ein int
an eine enum
in C#?
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!
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()
)
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;
}
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.
Enums haben die Verwendung von Integer-Konstanten wie dieser abgelöst, da sie mehr Typsicherheit bieten
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.
Es gibt mindestens eine Situation, die ich gefunden habe, in der die Sicherheit von Enum-Typen ungewollt umgangen werden kann.
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");
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;
}
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.