Menu

Enumeraciones bit flag

noviembre 12, 2010 - ASP.NET

En nuestro que hacer diario es muy normal utilizar enumeraciones con diferentes propósitos, pero pocos conocíamos algunas técnicas especiales de las enumeraciones que permiten aplicar operadores binarios y realizar combinaciones con los valores de la enumeración.

Las enumeraciones como Flags

Usar enumeradores como bit flags es muy útil para hacer combinaciones sin necesidad de crear propiedades distintas para cada configuración. Para poder hacer uso de estas características es necesario “adornar” nuestra enumeración con el atributo [Flags], en el siguiente ejemplo podemos observar como en la misma enumaracion podemos combinar valores siguiendo solo una regla: colocarle valores binarios a los elementos de la enumeración. Ejemplo:


[Flags]

enum Permissions

{

None = 0, //000

Read = 1, //001

Write = 2, //010

Upload = 4, //100

FullControl = Read | Write | Upload //111

}

Console.WriteLine("Enumeration with Flags, None: {0}", Convert.ToInt32(Permissions.None));

Console.WriteLine("Enumeration with Flags, Read: {0}", Convert.ToInt32(Permissions.Read));

Console.WriteLine("Enumeration with Flags, Write: {0}", Convert.ToInt32(Permissions.Write));

Console.WriteLine("Enumeration with Flags, Upload: {0}", Convert.ToInt32(Permissions.Upload));

Console.WriteLine("Enumeration with Flags, FullControl: {0}", Convert.ToInt32(Permissions.FullControl));

Console.WriteLine("---------------------");

Permissions userPermission;

userPermission = Permissions.Read | Permissions.Upload;

Console.WriteLine("User permission: {0}", userPermission);

if ((userPermission & Permissions.Read) == Permissions.Read)

{

Console.WriteLine("Yay!!, I have read permissions...");

}

else

{

Console.WriteLine(":'(, I don't have read permissions...");

}

if ((userPermission & Permissions.Upload) == Permissions.Upload)

{

Console.WriteLine("Yay!!, I have upload permissions...");

}

else

{

Console.WriteLine(":'(, I don't have upload permissions...");

}

if ((userPermission & Permissions.Write) == Permissions.Write)

{

Console.WriteLine("Yay!!, I have write permissions...");

}

else

{

Console.WriteLine(":'(, I don't have write permissions...");

}

Console.ReadKey();

El codigo anterior produce la siguiente salida:

Como ves es muy fácil utilizar este tipo de enumeraciones y muy útiles.

Buenas practicas de enumeraciones

Por ultimo y hablando de enumeraciones hagamos un pequeño listado de mejores practicas para el uso de estas:

Buenas ideas:

Malas ideas:

Etiquetas: ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *