Muchos desarrolladores usan enums como se describe arriba, pero hay más de lo que se ve a simple vista. La solución para la limitación que plantea el enum estándar viene en forma de Banderas . Modifiquemos nuestro enum original .
123456789[Banderas]publicenum BitTiers {Ninguno =1, Desarrollo =2, Prueba =4, Producción =8, CasiProd = Producción | Ninguno, CasiTestint = Prueba | Ninguno, CasiDesarrollo = Desarrollo | Ninguno}
csharp
Para utilizar las banderas , necesitamos utilizar los valores simples y combinados. Para los valores simples, serán potencias de dos . Los valores combinados vendrán de la expresión lógica o representada por el carácter | .
Para entender esto, necesitamos mirar los valores binarios de estos elementos para el original y el enum.
Los valores del original en binario:
123456publicenum Tiers {Ninguno,//000000 Desarrollo,//000001 Pruebas,//000010 Producción //000011}
csharp
Los valores de los bits en binario:
123456789[Banderas]publicenum BitTiers {Ninguno =1,//000001 Desarrollo =2,//000010 Prueba =4,//000100 Producción =8,//001000 CasiProd = Producción | Ninguno,//001001001 CasiProd = Prueba | Ninguno,//000101 CasiDesarrollo = Desarrollo | Ninguno //000011}
csharp
Usemos este foreach para hacer el trabajo pesado.
12foreach(var nivel en Enum.GetValues(typeof(BitTiers))){ Console.WriteLine("El nivel: "+ nivel +" tiene el valor de "+(int)level);}
csharp
Iterando sobre los valores podemos ver la siguiente salida.
1234567El nivel: Ninguno tiene un valor de 1El nivel: El desarrollo tiene un valor de 2. El nivel: CasiEl desarrollo tiene un valor de 3El nivel: Las pruebas tienen un valor de 4. El nivel: CasiLas pruebas tienen un valor de 5El nivel: La producción tiene un valor de 8. El nivel: AlmostProd tiene un valor de 9
bash
¿De dónde viene el valor de la etiqueta Casi ? Tomemos el AlmostTesting como ejemplo.
Se compone de la expresión lógica o entre 000100 (Prueba) y 000001 (Ninguna). La tabla de verdad del operador lógico o es la siguiente.
El hecho de que puedas asignar valores para cada etiqueta o dejar que el constructor decida por ti, resulta útil cuando quieres crear una aplicación configurable con la magia de enums .