Si usted hace un [Banderas] enumeración, se puede asignar un valor poco diferente (1, 2, 4, 8, 16 ...) para cada valor enumerado. Luego puede usar una operación bit a bit para determinar si un valor es uno de un conjunto de valores posibles.
lo tanto, para ver si es C, D o F:
bool IsCDF(MyEnum enumValue)
{
return((enumValue & (MyEnum.C | MyEnum.D | MyEnum.F)) != 0);
}
Tenga en cuenta que esto no va a funcionar para un valor de 0 (en el ejemplo, 'A'), y debe estar cuidadoso de que todos los valores de enum se resuelvan en valores de bit únicos (es decir, potencias de dos diferentes de cero).
Las ventajas de este enfoque son:
- se suele tomar una sola instrucción de la CPU para ejecutar, mientras que haciendo tres separada "si" verificaciones tendrán en 3 o más instrucciones (dependiendo de la plataforma de destino).
- puede pasar el conjunto de valores que desea probar con como un valor de enumeración (un entero) en lugar de tener que utilizar listas de valores de enumeración.
- Puede hacer muchas otras cosas útiles con operaciones bit a bit, que serían torpes y lentas con los enfoques numéricos/comparativos ordinarios.
http://stackoverflow.com/questions/93744/most-common-c-bitwise-operations/417217#417217 –