¿Cómo puedo obtener el número de elementos definidos en una enumeración?Número total de elementos definidos en una enumeración
Respuesta
Puede usar el método estático Enum.GetNames
que devuelve una matriz que representa los nombres de todos los elementos en la enumeración. La propiedad de longitud de esta matriz es igual a la cantidad de elementos definidos en la enumeración
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Enum.GetValues (typeof (MyEnum)). Longitud;
Puede usar Enum.GetNames para devolver un IEnumerable de valores en su enumeración y luego .Consumir el IEnumerable resultante.
GetNames produce el mismo resultado que GetValues pero es más rápido.
A partir de las respuestas anteriores solo se agrega una muestra de código.
class Program
{
static void Main(string[] args)
{
int enumlen = Enum.GetNames(typeof(myenum)).Length;
Console.Write(enumlen);
Console.Read();
}
public enum myenum
{
value1,
value2
}
}
Un truco ingenioso que vi en una respuesta C a esta pregunta, sólo tiene que añadir un último elemento de la enumeración y lo utilizan para contar cuántos elementos hay en la enumeración:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
En el En caso de que esté definiendo un valor de inicio distinto de 0, puede usar NumberOfTypes - Type1 para determinar la cantidad de elementos.
No estoy seguro 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 verificar esta información para nosotros.
esto es bueno ya que puedo hacer esto en XNA porque GetNames no está disponible allí –
Truco genial, esto también sería más rápido que GetNames() porque no tiene que contarlos. –
¡Tenga cuidado con el código que recorre las enum a través de foreach, puede leer desde el final de sus matrices! –
La pregunta es:
¿Cómo puedo obtener el número de elementos definidos en una enumeración?
El número de "elementos" realmente podría significar dos cosas completamente diferentes. Considera el siguiente ejemplo.
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
¿Cuál es el número de "elementos" se define en MyEnum
?
Es el número de elementos 5? (A
, B
, C
, D
, E
)
O es 3? (1
, 2
, 3
)
El número de nombres definidos en MyEnum
(5) se puede calcular como sigue.
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
El número de valores definidos en MyEnum
(3) puede ser calculada como sigue.
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
Esto debería votarse a la cima. – Xonatron
Forma alternativa de escribir la última línea, 'var valuesCount = ((MyEnum []) Enum.GetValues (typeof (MyEnum))) Distinct(). Count();'. –
Para Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
no funcionó conmigo, pero [Enum].GetNames(GetType(Animal_Type)).length
lo hicieron.
¿Por qué el voto a favor? Esto solucionó mi problema, es la sintaxis correcta para VB, aunque la pregunta está etiquetada C#, sigue siendo útil. –
Votos bajos probablemente porque la pregunta está etiquetada C# y esta respuesta no menciona que no estaba usando C#. – idbrii
Estaba investigando esto 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, puede agregar otro elemento al final de su enumeración llamada "Longitud". De esta manera, sólo tendrá que escribir:
var namesCount = (int)MyEnum.Length;
Por supuesto, si otros van a utilizar su código - o estoy seguro de que en muchas otras circunstancias que no se aplicaba a mí en este caso - esta solución puede ser de mal aconsejado a terrible.
Esto también se basa en la enumeración que comienza en 0 (el valor predeterminado, pero de ninguna manera garantizado). Además, hace que el intellisense para el uso de enum normal * muy * confuso. Esta es casi siempre una idea ** terrible **. – BradleyDotNET
Eso no tomó mucho tiempo :) – EnergyWasRaw
Interesante, supongo que nunca se sabe cuando puede ocurrir algo mejor. Hice mi mejor intento para evitar mi propia solución, ¡pero me pareció lo suficientemente interesante como para compartir! – EnergyWasRaw
Si usted se encuentra escribiendo la solución anterior tantas veces como yo, entonces podría implementarlo como un genérico:
public static int GetEnumEntries<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
return Enum.GetNames(typeof(T)).Length;
}
- 1. Obtener el número total de elementos enum
- 2. Número de elementos en una enumeración
- 3. Obtener el número total de elementos en el conjunto
- 4. ¿Número total de publicaciones?
- 5. Contar número total de XmlNodes en C#
- 6. Iterar a través de elementos en una enumeración en Delphi
- 7. Número máximo de elementos enum en Java
- 8. Contando el número de banderas establecidas en una enumeración
- 9. Número total de fotogramas con ffmpeg
- 10. Vimdiff: visualización del número total de cambios
- 11. Javascript enumeración dentro de una enumeración
- 12. Seleccione un elemento al azar, sin saber el número total de elementos
- 13. Número total de campos en todas las tablas de la base de datos
- 14. agrupar los elementos por importe total
- 15. número de elementos en NSMutableArray
- 16. ¿Cómo obtener el número total de iteraciones en un foreach
- 17. MySQL - cuenta el número total de filas en php
- 18. Cómo obtener el número total de resultados posibles en Lucene
- 19. Recuperar el número total de líneas en un archivo
- 20. Paginación de Tridion: obtención del número total de resultados
- 21. Valores máximos y mínimos en una enumeración de C++
- 22. Pantalla de la red KendoUI número total de registros
- 23. Mostrar el número total de páginas en una barra de herramientas de informes de RDLC
- 24. Core Data NSFetchedResultsController - Número total de registros devueltos
- 25. Cuenta Seq número de elementos
- 26. Para obtener el número total de columnas en una tabla en sql
- 27. C: encontrar el número de elementos en una matriz []
- 28. Devolución del número de elementos en una lista
- 29. Muestra el número total de caracteres de cadena
- 30. NHibernate 3 paginación y determinación del número total de filas
De acuerdo ... aquí hay un enlace que encontré http://www.csharp411.com/c-count-items-in-an-enum/ –
También podría usar Enum.GetValues. – Xonatron
System.Enum.GetNames, si todavía no incluye el espacio de nombres del sistema. –