2012-03-20 19 views
5

¿Qué operaciones aritméticas se admiten en C# enumeraciones? Sorprendentemente, no pude encontrarlo ni a través de google, ni de wikipedia y stackoverflow.operaciones aritméticas en valores enum

¿Puedo agregar dos valores de enumeración sin ningún molde? Añadir constante arbitraria a un valor o restarlo? ¿O garantiza enum que un valor de ese tipo es siempre uno de los valores enum definidos o su máscara de bits?

class ... {... 
enum WeekDays : byte { Sun = 1, Mon = 2, Tue = 3, /* and so on*/ Sat = 7 }; 
public static bool IsWeekend (WeekDays _d) { 
/// Can I be sure here that _d has value from 1..7? May it be any of 0..255? 
} 

Sé acerca de las operaciones a nivel de bit, Parece razonable apoyarlas para representar las banderas.

Wikipedia nos dice que mi muestra también permite _d - 1 o WeekDays.Tue - WeekDays.Mon, que puede ser útil para enumeraciones secuenciales estrictamente ordenadas, pero no puedo encontrar ninguna referencia estándar, ¿podría, por favor, señalarme?

+0

¿No puedes simplemente probarlo y ver qué pasa? – Matt

+1

Mi punto es conocer el comportamiento estándar, no cierto compilador. Primero, quiero estar seguro, mi código será correcto para cualquier compilador que soporte el estándar C# (MS, Mono, ). En segundo lugar, quiero leer algo útil del artículo estándar correspondiente para estar mejor preparado para mi prueba de C#. – gluk47

Respuesta

0

Si desea utilizar una operación aritmética, no use enums, use numbers. Enums es una convención de nombres para valores numéricos para que sean más legibles y permitan tener una combinación de de ellos. Esa es en realidad la razón por la que no encontró nada al respecto en Internet, porque no es todo lo que debería hacerse con enums.

+0

Me gustaría encontrar el capítulo del estándar que explícitamente permita o prohíba las operaciones aritméticas, solo para estar seguro y tener referencias para decir, mi profesor del instituto. También encontré que ' + ' está permitido, así como ' - ', así que estoy interesado en qué más tiene sentido desde el punto de vista de los desarrolladores de C#, ¿qué suposiciones debo hacer al usar valores enum en mi código. Personalmente prohibiría cualquier operación sobre los valores enum, teniendo la posibilidad de permitir explícitamente las operaciones a bit, estoy de acuerdo con usted) – gluk47

+0

@ gluk47: tenga en cuenta que las enumeraciones son solo números enteros, por lo que admiten todo el conjunto de posibles operaciones aritméticas. El caso es que, como dije, simplemente no es un caso para usarlos en los tipos enum, eso es. Pero están ** no ** prohibidos. – Tigran

+0

En realidad, están prohibidos. Al menos VS2008 genera un error si trato de agregar o multiplicar dos valores enum. La operación puede continuar con la conversión de ambos operandos al tipo subyacente, pero mi pregunta fue sobre los operadores directamente aplicables a los valores enum. – gluk47

5

Los siguientes operadores se puede utilizar en valores de tipos de enumeración: ==, !=, <, >, <=, >=, +, -, ^, &, |, ~, ++, --, sizeof.

+0

Gracias. ¿Cómo encontraste eso? Cualquier referencia, página de manual? ¿Significa '+' aquí ' + '? – gluk47

+0

¿'' significa 'binario negativo'? Del mismo modo, ¿está permitido el ' + '? – gluk47

+0

@ gluk47, el tipo subyacente de cada elemento en la enumeración es de tipo numérico integral, excepto 'char'. Por lo tanto, las enumeraciones tienen las mismas operaciones que, por ejemplo, el tipo de datos 'int'. –

Cuestiones relacionadas