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:
(and not)
Prüfung auf ein oder mehrere Flags:
oder