Enum
Bryczka z flagami
Pamięć przywiodła mi myśl o bitach, ale pomyślałam sobie - że niby nie ma czegoś nowszego i elegantszego?
po wybraniu konika "zielonego" dostajemy - parę "czerwony, czarny", a to z powodu tego że możliwości ponumerują się po kolei.
Więc wracam do opcji bitowej.
Jednak Black | Green daje ... 5
Hmm no tak ale teraz trzeba jakoś się dostać do wartości w zmiennej, ponieważ zazwyczaj chcemy się dowiedzieć czy coś jest konkretnego koloru.
Z odsieczą przychodzą operacje bitowe.
public enum Kolorki { None , Black , Red , Green , Blue };Koń jaki jest każdy widzi. A co jeśli byśmy chcieli mieć bryczkę z kiloma końmi?
Pamięć przywiodła mi myśl o bitach, ale pomyślałam sobie - że niby nie ma czegoś nowszego i elegantszego?
[FlagsAttribute] public enum Kolorki { None , Black , Red , Green , Blue }; //Kolorki.Green = Kolorki.Black | Kolorki.RedŚwietnie bryczka z flagami. Tylko że:
po wybraniu konika "zielonego" dostajemy - parę "czerwony, czarny", a to z powodu tego że możliwości ponumerują się po kolei.
Więc wracam do opcji bitowej.
public enum Kolorki { None = 0, Black = 1, Red = 2, Green = 4, Blue = 8 };Świetnie zielony jest zielony. Ponieważ wartości na siebie nie nachodzą.
Jednak Black | Green daje ... 5
[FlagsAttribute] public enum Kolorki { None = 0, Black = 1, Red = 2, CzarnoCzerwony = Black | Red, Green = 4, Blue = 8 };Dopiero połączenie opcji daje pożądane od początku efekty, więcej nawet możemy sobie deklarować pośrednie wartości.
Hmm no tak ale teraz trzeba jakoś się dostać do wartości w zmiennej, ponieważ zazwyczaj chcemy się dowiedzieć czy coś jest konkretnego koloru.
Z odsieczą przychodzą operacje bitowe.
public bool EnumVariableContains(Kolorki combined, Kolorki checking) { return ((combined & checking) == cheking); }Pozostaje kwiestia pozbycia się jednego ze złączonych kolorków:
private void SomeSome() { Kolorki c = Kolorki.Green | Kolorki.Red; //nie chcemy czerwonych c = c & ~Kolorki.Red }Na zakończenie link to malej dyskusji StackOverFlow i innego posta gdzie łądnie narysowano bitki ;) Wimdows.Net
Komentarze
Prześlij komentarz