Hallo,
ich habe da ein Problem. Um eine Anmeldung zu realisieren und möglichst einfach die Rechte der angemeldeten Person auswerten zu können, habe ich mir überlegt einen Zahlenwert bitweise zu vergleichen um zu schauen welches Bit gesetzt und damit welche Rechte erteilt werden.
Nun zu meinem Problem, ich bekomme dauernd eine Meldung das der Integer nicht in einen Bool konvertiert werden kann, obwohl ich mir sicher bin das der Ansatz richtig ist. (Hab es vor Monaten mal wo gesehen, aber weiss es nur noch ruchstückhaft)
Hier mal ebend ein Stück Code, wie ich es bisher stehen habe :
int rechte = 10;
if ( rechte&1 == 2)
tu_dies();
In dem Beispiel sollte das Bit "2" gesetzt sein und tu_dies() aufgerufen werden.
Danke fürs lesen, vielleicht kann mir einer einen Hinweis geben, wo ich mir die Geschichte anlesen kann, oder den entscheidenen Tip auf meinen Fehler geben.
Hallo Chaser0815,
am besten verwendest du statt der Zahlenwerte Enum-Werte und statt int den Typ des Enums. Das löst dann vermutlich nebenbei auch noch dein Problem.
herbivore
Da outet sich ein Ex-C-Programmierer 😉
Herbi hat den richtigen Weg gewiesen. Ergänzend sei gesagt, dass man für einen solchen Zweck Enums verwendet, die mit dem Flags-Attribute ausgezeichnet werden:
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1, // Bit 0
Green = 2, // Bit 1
Blue = 4 // Bit 2
};
die anderen haben ja schon gesagt, das enum für sowas geeigneter ist
dem solltest du auch nachgehen 🙂
trotz allem mal die berichtigung deines codes
int rechte = 10; if ( rechte&1 == 2) tu_dies();
In dem Beispiel sollte das Bit "2" gesetzt sein und tu_dies() aufgerufen werden.
da sollte dann eher so aussehen
int rechte = 10;
if(rechte & 2 != 0) {
tu_dies();
}
um das mal bitweise darzustellen
1010b (dezimal 10)
& 0010b (dezimal 2)
---------------------------
0010b (dezimal 2)
und da das != 0 ist, erkennst du so dass das/die entsprechende(n) bit gesetzt ist/sind
Danke für die Hilfe, ich werde es dann mal in Ruhe @home heute Abend durchgehen und mich dann den Enums widmen, denke ich mal 😉
Soll jetzt keine Werbung darstellen, aber dennoch der Hinweis auf mein Weblog. Hier findet sich ein Eintrag, der sich mit den Grundlagen rund um Enumeratoren und Flags beschäftigt:
http://blog.norberteder.com/index.php?entry=entry060609-122806
.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup
Danke noch einmal an alle 🙂 Ich habe es mittlerweile am laufen und wollte noch ebend Danke sagen.
Da ich mich aber zur Zeit (ich werde mir das mal weiter anschauen) aber noch nicht mit den Enums anfreunden kann (es ist ein Projekt mit mehreren Leuten und ich bin in der Unterzahl 😦 ) werde ich wohl erst meine momentane Lösung nehmen müssen 😉
@ Sheitman
int rechte = 10;
if((rechte & 2) != 0)
{
tu_dies();
}
So klappt es zumindest bei mir richtig 🙂
Du hattest nur die innere Klammer zu wenig.
Hallo Chaser0815,
gerade wenn meherer Leute an dem Projekt arbeiten, ist es wichtig Enums zu verwenden! Die autmatische Dokumentationswirkung von Enums (man weiß direkt aus dem Code, auf welche Rechte abgefragt wird) ist Gold wert.
herbivore
Hallo Herbivore,
ich würde dich gerne einladen, die anderen davon zu überzeugen. Mir ist es leider noch nicht gelungen. Aber mal schauen, immerhin ist ein Schulprojekt und wir sollen da ja aus Fehlern lernen 8)
mfg Chaser
Hallo Chaser0815,
sag ihnen, nach Auffassung gestandener und professioneller Informatiker stellt der Verzicht auf Enums in diesem Fall einen kaum zu überbietenden Diletantismus dar. Das meine ich wirklich so.
herbivore
Du hattest nur die innere Klammer zu wenig. ja die lieben klammern 🙂