Por vezes é interessante poder combinar num campo combinações de um enumerado, isso pode ser conseguido à custa do atributo Flag. Primeiro vou mostrar o exemplo sem o atributo e depois com o atributo.
public enum TournamentMode {
Uefa,
Champions,
Groups,
Eliminatory
};
public class Tournament
{
TournamentMode championship = TournamentMode.Champions;
TournamentMode fase = TournamentMode.Groups;
[...]
}
Neste caso preciso de ter dois campos na classe um para representar o tipo de taça e outro para representar a fase em que se vai no torneio, o exemplo seguinte combina os atributos num só campo.
[Flag]
public enum TournamentMode {
Uefa, //0001
Champions, //0010
Groups, //0100
Eliminatory //1000
};
public class Tournament
{
TournamentMode info = TournamentMode.Champions | TournamentMode.Groups; //0110
[...]
}
Ao acrescentar o atributo Flag cada valor do enumerado passa a ser representado por um bit, ou seja, é possível fazer combinações e testar essas combinações como se tivessemos a fazer ands e ors bit a bit.
bool isInGroup = info == TournamentMode.Groups;

