¿Cómo puedo obtener el número de elementos definidos en una enumeración?
318
Puede usar el método estático Enum.GetNames
que devuelve una matriz que representa los nombres de todos los elementos de la enumeración. La propiedad de longitud de esta matriz es igual al número de elementos definidos en la enumeración
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
La pregunta es:
El número de "artículos" realmente podría significar dos cosas completamente diferentes. Considere el siguiente ejemplo.
¿Cuál es el número de "artículos" definidos en
MyEnum
?¿Es el número de artículos 5? (
A
`B
`C
`D
`E
)¿O es 3? (
1
`2
`3
)El número de nombres definidos en
MyEnum
(5) se puede calcular de la siguiente manera.El número de valores definidos en
MyEnum
(3) se puede calcular de la siguiente manera.fuente
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
,.Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;).Enum.GetValues (typeof (MyEnum)). Longitud;
fuente
Un ingenioso truco que vi en una respuesta C a esta pregunta, solo agregue un último elemento a la enumeración y úselo para decir cuántos elementos hay en la enumeración:
En el caso de que esté definiendo un valor inicial distinto de 0, puede usar NumberOfTypes - Type1 para determinar el número de elementos.
No estoy seguro de si este método sería más rápido que usar Enum, y tampoco estoy seguro de si se consideraría la forma correcta de hacerlo, ya que tenemos Enum para averiguar esta información por nosotros.
fuente
De las respuestas anteriores simplemente agregando código de muestra.
fuente
Puede usar Enum.GetNames para devolver un IEnumerable de valores en su enumeración y luego .Cuenta el IEnumerable resultante.
GetNames produce el mismo resultado que GetValues pero es más rápido.
fuente
Si te encuentras escribiendo la solución anterior con tanta frecuencia como yo, entonces podrías implementarla como genérica:
fuente
Estaba investigando esto justo ahora, y no estaba contento con la legibilidad de la solución actual. Si está escribiendo código de manera informal o en un proyecto pequeño, simplemente puede agregar otro elemento al final de su enumeración llamado "Longitud". De esta manera, solo necesita escribir:
Por supuesto, si otros van a usar su código, o estoy seguro de que en muchas otras circunstancias que no se aplican a mí en este caso, esta solución puede ser desde desaconsejable hasta terrible.
fuente
Para Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
no funcionó conmigo, pero lo[Enum].GetNames(GetType(Animal_Type)).length
hizo.fuente