Вот вариант ответа Ani :
public static void MyMethod(Flags flag)
{
// Define action-lookup
var dict = new Dictionary<Flags, Action>
{
{ Flags.p1, DoSomething},
{ Flags.p2, DosomethingElse},
{ Flags.p3, DosomethingElseAgain},
{ Flags.p4, DosomethingElseAgainAndAgain},
};
// Find applicable actions
var actions = from value in Enum.GetValues(typeof(Flags))
where flag.HasFlag(value)
select dict[value];
//Execute applicable actions
foreach (var action in actions)
action();
}
Важным отличием здесь является то, что он перебирает определенные значения в перечислении, а не записи в словаре.Таким образом, если вы добавите новый флаг в перечисление, не добавляя его в словарь, вы получите исключение при попытке использовать новый флаг.И он всегда повторяется в порядке флагов.