enum in C#

Conners

Erfahrenes Mitglied
Hi,

ich brauch nochmal eure Hilfe. Undzwar hab ich vor so eine Art Zustandsmaschine für mein Programm zu erstellen, indem es logischerweise dann ca. 20-30 Zustände gibt.

Ich könnte ja einfach n String erstellen und diesem immer einen Zustand geben, aber das will ich nicht; ich möchte gerne, dass ich eine art enumeration hab, so z.B.

Code:
enum myProject_States{
ONLINE,
OFFLINE,
RUNNING,
IDLE,
....
}

Ich habs schon probiert, allerdings krieg ich die Abfrage irgendwie nur über integers hin, indem ich z.B. eine integerVariable erstell und im Code z.B. folgendes schreib:
int MyProject_State = (int)myProject_States.ONLINE;

wo ist mein denkfehler ? irgendwie hab ich auch das gefühl in C war das mit den enums ganz anders.

ich möchte gerne, dass ich im Code so programmieren könnte, weil mir persönlich so eine Denkweise naheliegt:

Code:
...
if (myProject_State == IDLE)
{
        doSomething(...);
        myProject_State = RUNNING;
}

Ich weiß, wenn ich das mit einem String machen würde, wärs einfacher, aber da wären noch die nervigen anführungsstriche und ich hab früher in C immer mit enums so programmiert und möchte das gerne beibehalten.
Evtl. mach ich auch einfach nur was komplett verkehrt.


Gruß
Conners
 
Enumerations sind typisiert. Du musst also der Zustandsvariablen auch den richtigen Typ verpassen und bei Vergleichen den Typ mit angeben:
C#:
myProject_States MyProject_State = myProject_States.ONLINE;

// ..

if(  MyProject_State == myProject_States.IDLE )
{
    // ...
}
Gruß
MCoder
 
schade...

Gibts da keinen von mir aus auch codemäßig aufwendigen Trick, wie man das umgehen könnte? also dass man nur schreiben muss state = ONLINE ... etc. ?
Wenn ich mehrere Zustandsmaschinen einbau, muss ichs eh so machen, aber ich hab nur eine einzige.

Trotzdem schonmal danke für den Hinweis
 
Die Alternative wäre halt nur das Typecasting, aber ansonsten denke ich nicht, dass das noch irgendwie anders geht.

Gruß
MCoder
 
Gibts da keinen von mir aus auch codemäßig aufwendigen Trick, wie man das umgehen könnte? also dass man nur schreiben muss state = ONLINE ... etc. ?
Also ob nun state = ONLINE oder state = StateType.ONLINE.
Ich sehe da kein wirklichen mehr Aufwand drin und versteh auch nicht wirklich was du nun anders haben willst :confused:

oder suchst du eher sowas:
Code:
enum StateType
{
    IrgendNenStatus=1
}
...
Enum.IsDefined(typeof(StateType), 1); //true
Enum.IsDefined(typeof(StateType), 2); //false
 
Es geht nicht um den Aufwand, sondern darum, dass ich das vorher in C/C++ ähnlich gemacht hab. Aber so wie es zur Zeit ist, ists auch super.

Ich bedanke mich.

Schöne Grüße
Conners
 

Neue Beiträge

Zurück