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;
Um belo post!
ResponderEliminarDevo dizer que, analisando com cuidado, creio que no teu caso deverias ter 2 enumerados, dado que o tipo de torneio e a fase em que se encontra representam dois elementos distintos.
De qualquer modo, bela dica =)
Boa dica ;o)
ResponderEliminarHugz,
Luís
Olá Caxaria, ao tempo que não sabia nada de ti. O exemplo até é pouco adequado, só que onde eu utilizei esta técnica num código bastante mais complexo, e então arranjei este exemplo meio "à pressão" só como demonstração.
ResponderEliminarLuís, não sei se te conheço porque conheço alguns Luíses não sei se te incluis no grupo, mas obrigado na mesma :)
Pois, agora ando a trabalhar como consultor em Inglaterra... tenho sabido pouco do pessoal em Portugal... mas mantenho o teu blog debaixo de olho ;)
ResponderEliminarE tu, como corre a vida?
Abraços de um ex-medialogense para outro ;)
A utilização de atributos no mundo .NET permite acrescentares informação à metadata gerada para a tua aplicação.
ResponderEliminarNa minha opinião o exemplo que apresentas permite demonstrar com sucesso a agilidade do atributo Flag em acção.
Nice one.