Tengo el siguiente código (ejemplo), y estoy realmente no se siente cómodo con tantos 'si' cheques:Indicadores de bit a bit y declaración de cambio?
public enum Flags
{
p1 = 0x01, // 0001
p2 = 0x02, // 0010
p3 = 0x04, // 0100
p4 = 0x08 // 1000
};
public static void MyMethod (Flags flag)
{
if ((flag & Flags.p1) == Flags.p1)
DoSomething();
if ((flag & Flags.p2) == Flags.p2)
DosomethingElse();
if ((flag & Flags.p3) == Flags.p3)
DosomethingElseAgain();
if ((flag & Flags.p4) == Flags.p4)
DosomethingElseAgainAndAgain();
}
MyMethod(Flags.p1 | Flags.p3);
¿Hay alguna manera, que yo podría utilizar una sentencia 'interruptor'. ¿Tal vez si los convierto en cadenas o utilizo arreglos?
Una declaración de 'cambio' no es lo que quieres porque es equivalente a un montón de instrucciones 'if ... else if ... else if ...', que claramente no es lo que tienes. – Gabe
Tenga en cuenta que en C# 4.0 puede usar 'flag.HasFlag (Flags.p1)' en lugar de 'flag & Flags.p1 == Flags.p1' – Gabe
@Gabe: hivemind! –