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)

questionAnswers(4)

yourAnswerToTheQuestion