Laden...

Int32 auf ein Enum abbilden

Erstellt von Stipo vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.679 Views
Stipo Themenstarter:in
699 Beiträge seit 2007
vor 13 Jahren
Int32 auf ein Enum abbilden

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

Gelöschter Account
vor 13 Jahren

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.

Stipo Themenstarter:in
699 Beiträge seit 2007
vor 13 Jahren

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

F
10.010 Beiträge seit 2004
vor 13 Jahren

@Stipo:
Was ist so schwer an :


MeinEnumTyp myEnum = (MeinEnumTyp)derBerechneteIntWert;

Stipo Themenstarter:in
699 Beiträge seit 2007
vor 13 Jahren

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

C
252 Beiträge seit 2007
vor 13 Jahren

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.

1.552 Beiträge seit 2010
vor 13 Jahren

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

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

C
252 Beiträge seit 2007
vor 13 Jahren

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.

49.485 Beiträge seit 2005
vor 13 Jahren

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