EDYCJA: To jest teraz dostępne w wersji 0.0.0.2 UnconstrainedMelody.
(Zgodnie z prośbą zawartą w moim poście na blogu dotyczącym ograniczeń wyliczeniowych . Poniżej zamieściłem podstawowe fakty, aby udzielić niezależnej odpowiedzi.
Najlepszym rozwiązaniem jest zaczekanie, aż dołączę go do UnconstrainedMelody 1 . Jest to biblioteka, która przyjmuje kod C # z „fałszywymi” ograniczeniami, takimi jak
where T : struct, IEnumConstraint
i zamienia go w
where T : struct, System.Enum
poprzez krok po kompilacji.
Nie powinno być zbyt trudno to napisać IsSet
... chociaż obsługa flag zarówno Int64
opartych, jak i UInt64
opartych może być trudną częścią. (Wyczuwam nadchodzące metody pomocnicze, w zasadzie pozwalające mi traktować wyliczenie wszystkich flag tak, jakby miały podstawowy typ UInt64
.)
Jakie zachowanie byś chciał, gdybyś zadzwonił
tester.IsSet(MyFlags.A | MyFlags.C)
? Czy powinien sprawdzić, czy wszystkie określone flagi są ustawione? Takie byłoby moje oczekiwanie.
Spróbuję to zrobić dziś wieczorem w drodze do domu ... Mam nadzieję, że będę miał szybki rzut oka na użyteczne metody wyliczania, aby szybko doprowadzić bibliotekę do użytecznego standardu, a potem trochę się zrelaksować.
EDYCJA: Nawiasem mówiąc, nie jestem pewien IsSet
co do nazwy. Opcje:
- Zawiera
- Zawiera
- HasFlag (lub HasFlags)
- IsSet (z pewnością jest to opcja)
Myśli mile widziane. Jestem pewien, że minie trochę czasu, zanim cokolwiek zostanie osadzone w kamieniu ...
1 lub oczywiście prześlij jako łatkę ...