Wypisz wszystkie nazwy bitów z flagi Enum
Próbuję utworzyć metodę pomocniczą do wyświetlania nazw wszystkich bitów ustawionych w wartości Enum (do celów rejestrowania). Chcę mieć metodę, która zwróciłaby listę wszystkich wartości Enum ustawionych w niektórych zmiennych. W moim przykładzie
<code>[Flag] Enum HWResponse { None = 0x0, Ready = 0x1, Working = 0x2, Error = 0x80, } </code>
Podaję go 0x81 i powinien on dać miIEnumerable<HWResponse>
zawierający{Ready, Error}
.
Ponieważ nie znalazłem prostszego sposobu, próbowałem napisać poniższy kod, ale nie mogę go skompilować.
<code>public static IEnumerable<T> MaskToList<T>(Enum mask) { if (typeof(T).IsSubclassOf(typeof(Enum)) == false) throw new ArgumentException(); List<T> toreturn = new List<T>(100); foreach(T curValueBit in Enum.GetValues(typeof (T)).Cast<T>()) { Enum bit = ((Enum) curValueBit); // Here is the error if (mask.HasFlag(bit)) toreturn.Add(curValueBit); } return toreturn; } </code>
W tej wersji kodu kompilator skarży się, że nie może rzucić T na Enum.
Co zrobiłem źle? Czy istnieje lepszy (prostszy) sposób, aby to zrobić? Jak mogłem zrobić obsadę?
Próbowałem też napisać metodę jako
<code>public static IEnumerable<T> MaskToList<T>(Enum mask) where T:Enum </code>
ale Enum jest specjalnego typu, który zabrania składni „gdzie” (przy użyciu C # 4.0)