Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: [C#] Set of Enum

  Alt 2. Aug 2007, 19:13
Die Antwort lautet "ganz einfach", was gleichzeitig auch nahelegt, dass Sets in C# nicht so schön in die Sprache eingebettet sind wie in Pascal; du musst einfach deinen Enum-Typen als das betrachten, was ein Set nativ ist: ein Bitvektor.
Nun aber mal weg von der Theorie und in die Praxis: Wir müssen erst einmal dafür sorgen, dass jeder enum-Wert wirklich ein anderes Bit für sich beansprucht:
Code:
 [Flags]
    enum MultiHue : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };
(frech geklaut aus dem SDK; das Flags-Attribut verdeutlicht, dass die Enum-Werte gemixt werden können und wird z.B. bei ToString() herangezogen, ist aber für die reine Manipulation unwichtig)
Der Rest ist einfache Bitrechnerei - nicht so komfortabel wie in Pascal, aber irgendwie... geeky *g* .
Kombination:
Code:
MultiHue.Blue | MultiHue.Red
(bitweises OR)
Entfernen eines Flags aus einem Set:
Code:
set & !MultiHue.Green
(and not)
Prüfung auf ein oder mehrere Flags:
Code:
(set & subset) == subset
oder
Code:
(set & subset) != 0
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat