NECROMAN: Je otázka, jestli to je jednodušší, čistší nebo co, ale můj první nástřel by byl
public static IEnumerable<T> GetFlagsBits<T>(T x) where T : struct
{
if (!typeof(T).IsEnum) throw new ArgumentException("Enum value required");
for(int i = 1; i != 0; i <<= 1)
{
if (((int)(object)x & i) != 0)
{
yield return (T)(object)i;
}
}
}
Akorát to teda funguje jen na enumy odvozené z intu. To ale ta tvoje verze taky. Navíc ta tvoje verze (plus to, že takhle nejde přeložit ;-) ) nepodporuje hodnoty mimo definici toho enumu.