Listet alle Bitnamen eines Flags Enum auf

Ich versuche, eine Hilfsmethode zum Auflisten der Namen aller in einem Enum-Wert gesetzten Bits (zu Protokollierungszwecken) zu erstellen. Ich möchte eine Methode, die die Liste aller in einigen Variablen festgelegten Enum-Werte zurückgibt. In meinem Beispiel

<code>[Flag]
Enum HWResponse
{
   None = 0x0,
   Ready = 0x1,
   Working = 0x2,
   Error = 0x80,
}
</code>

Ich füttere es mit 0x81, und es sollte mich mit einem versorgenIEnumerable<HWResponse> enthält{Ready, Error}.

Da ich keinen einfacheren Weg gefunden habe, habe ich versucht, den folgenden Code zu schreiben, aber ich kann ihn nicht kompilieren.

<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>

In dieser Version des Codes beschwert sich der Compiler, dass T nicht in Enum umgewandelt werden kann.

Was habe ich falsch gemacht? Gibt es eine bessere (einfachere) Möglichkeit, dies zu tun? Wie könnte ich die Besetzung machen?

Auch habe ich versucht, die Methode als zu schreiben

<code>public static IEnumerable<T> MaskToList<T>(Enum mask) where T:Enum
</code>

Enum ist jedoch von einem speziellen Typ, der die 'where'-Syntax verbietet (Using C # 4.0).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage