Listar todos os nomes de bits de uma bandeira Enum

Eu estou tentando fazer um método auxiliar para listar os nomes de todos os bits definidos em um valor de Enum (para fins de log). Eu quero ter um método que retornaria a lista de todos os valores Enum definidos em algumas variáveis. No meu exemplo

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

Eu o alimento 0x81, e ele deve me fornecer umIEnumerable<HWResponse> contendo{Ready, Error}.

Como não encontrei uma maneira mais simples, tentei escrever o código abaixo, mas não consigo compilá-lo.

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

Nesta versão do código, o compilador reclama que não pode converter T em Enum.

O que eu fiz errado? Existe uma maneira melhor (mais simples) de fazer isso? Como eu poderia fazer o elenco?

Além disso, tentei escrever o método como

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

mas Enum é de um tipo especial que proíbe a sintaxe 'where' (usando C # 4.0)

questionAnswers(4)

yourAnswerToTheQuestion