Saltar al contenido

Manipulación del enum

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

Manipulación del enum
Manipulación del enum

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 .