Enumerar todos los nombres de bit de una bandera Enum

Estoy tratando de hacer un método auxiliar para enumerar los nombres de todos los bits establecidos en un valor Enum (para fines de registro). Quiero tener un método que devuelva la lista de todos los valores de Enum establecidos en algunas variables. En mi ejemplo

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

Lo alimento 0x81, y debería proporcionarme unIEnumerable<HWResponse> que contiene{Ready, Error}.

Como no encontré una forma más sencilla, intenté escribir el código a continuación, pero no puedo compilarlo.

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

En esta versión del código, el compilador se queja de que no puede convertir T a Enum.

¿Qué hice mal? ¿Hay una manera mejor (más simple) de hacer esto? ¿Cómo podría hacer el elenco?

Además, traté de escribir el método como

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

pero Enum es de un tipo especial que prohíbe la sintaxis 'donde' (Uso de C # 4.0)

Respuestas a la pregunta(4)

Su respuesta a la pregunta