Nabend zusammen,
es muss doch irgendwie möglich sein, das ich einen Int32 Wert auf ein Enum abbilden kann, ohne das ich das innerhalb eines Switch machen muss.
Ich habe als Beispiel eine Methode, die etwas berechnet, und mir dann als ergebnis ein Int32 zurück gibt. Diesen Int32 Wert möchte ich aber als lesbares Enum speichern.
Hoffe ich hab das einigermaßen gut erklärt.
Kann mir da jemand unter die Arme greifen. Finde da nix im Internet und Intellisens ist bei einem Enum auch nicht sonderlich gesprächig.
Grüße Stephan
ist schon spät ich weiss nicht ob ichs verstanden habe.
du willst ein int einen enum wert wandeln bzw. prüfen ob dein
int einem bestimtem enum wert entspricht? Frage: .net 4 ?
Intellisens ist bei einem Enum auch nicht sonderlich gesprächig
Kann ich nicht bestätigen oder das hab ich auch nicht verstanden.
Hallo Sebastian.Lange,
du willst ein int einen enum wert wandeln bzw. prüfen ob dein
int einem bestimtem enum wert entspricht?
Ich bekomme von der Methode einen int zurück. Den Wert möchte ich dann als Enum zurück geben. Also benötige ich etwas, das ich diesem int Wert das Enum zuordnen kann.
Beispiel:
enum Wochentage
{
Montag = 1,
Dienstag = 2,
....
}
Int32 rückgabewert = GetBerechnet();
Wochentage wochentage = rückgabewert .... // Hier hänge ich
Ich könnte ja den rückgabewert in einem Switch durchlaufen, und dann das Enum da drin setzen, aber ich finde das nicht sonderlich schön, wenn sagen wir mal das Enum 20 Schlüselworte hat.
Hoffe das ist jetzt ein bisschen ersichtlicher was ich meine.
Grüße Stephan
@Stipo:
Was ist so schwer an :
MeinEnumTyp myEnum = (MeinEnumTyp)derBerechneteIntWert;
An dem ist nix schwer. Wohl eher an dem Brett vor meinem Kopf, weshalb ich da nicht drauf gekommen bin. Werde dann wohl mal ins Bett müssen, wenn ich so auf die Uhr schaue 😉
Danke noch, für die Lichtung in meinem Wald 🙂
Grüße Stephan
Naja das kann aber auch unter Umständen ins Auge gehen.
Sieh dir mal folgenden Code an:
class Program
{
enum Foo
{
Foo1 = 1,
Foo2 = 2
}
static void Main(string[] args)
{
Foo f = Foo.Foo1;
Console.WriteLine(f);
f = (Foo)3; //kein Fehler
Console.WriteLine(f);
Console.WriteLine(Enum.IsDefined(typeof(Foo), 3));
}
}
Ich würde eben noch mit Enum.IsDefined() prüfen ob es sich auch um einen gültigen enum Wert handelt.
hallo chavez,
Ich würde eben noch mit Enum.IsDefined() prüfen ob es sich auch um einen gültigen enum Wert handelt.
Dies ist jedoch auch nur möglich falls es sich um kein Flag Enum handelt.
[Flags]
public enum Test
{
t1 = 1,
t2 = 2,
t3 = 4,
t4 = 8,
t5 = t1 | t2
}
Test t = Test.t1 | Test.t2;
Test tt = Test.t1 | Test.t3;
Enum.IsDefined(typeof(Test),t); //true;
Enum.IsDefined(typeof(Test),tt); //false;
edit 1&2: Großschreibung des Klassennamen
Gruß
Michael
Na gut du hast das ja explizit definiert. t5 = t1 | t2
Du erhältst somit das gleiche Ergebnis() auch wenn du die Flags weglässt.
Wenn du t5 entfernst dann ergibt es in beiden Fällen flase. Egal ob mit oder ohne Flags.
Hallo chavez,
Wenn du t5 entfernst dann ergibt es in beiden Fällen flase.
was ja genau das Problem ist, auf das xxMUROxx hinweisen wollte. Mit IsDefined (alleine) kann man eben leider nicht prüfen, ob der Wert gültig ist oder nicht.
herbivore