c# - clase - que es un enum en java
Número total de elementos definidos en una enumeración (9)
De las respuestas anteriores simplemente agregando código de muestra.
class Program
{
static void Main(string[] args)
{
int enumlen = Enum.GetNames(typeof(myenum)).Length;
Console.Write(enumlen);
Console.Read();
}
public enum myenum
{
value1,
value2
}
}
¿Cómo puedo obtener el número de elementos definidos en una enumeración?
Estaba estudiando esto justo ahora, y no estaba contento con la legibilidad de la solución actual. Si está escribiendo el código de manera informal o en un proyecto pequeño, solo puede agregar otro elemento al final de su enumeración llamado "Longitud". De esta manera, solo necesitas escribir:
var namesCount = (int)MyEnum.Length;
Por supuesto, si otros van a usar su código, o estoy seguro que en muchas otras circunstancias que no se aplicaron a mí en este caso, esta solución puede estar en cualquier lugar, desde lo menos aconsejable a lo terrible.
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. Considere el siguiente ejemplo.
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
¿Cuál es el número de "elementos" definidos 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 de la siguiente manera.
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
El número de valores definidos en MyEnum
(3) se puede calcular de la siguiente manera.
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
Para Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
no funcionó conmigo, pero [Enum].GetNames(GetType(Animal_Type)).length
.
Puede usar Enum.GetNames para devolver un IEnumerable de valores en su enumeración y luego .Count el IEnumerable resultante.
GetNames produce el mismo resultado que GetValues pero es más rápido.
Si se encuentra escribiendo la solución anterior tan seguido como yo, podría implementarla como 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;
}
Un truco ingenioso que vi en una respuesta en C a esta pregunta, simplemente agregue un último elemento a la enumeración y utilícelo para decir cuántos elementos hay en la enumeración:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
En el caso de que esté definiendo un valor de inicio distinto de 0, puede usar NumberOfTypes - Type1 para determinar el número de elementos.
No estoy seguro de que este método sea más rápido que el uso de Enum, y tampoco estoy seguro de que se considere la forma correcta de hacerlo, ya que tenemos Enum para determinar esta información por nosotros.
Enum.GetValues (typeof (MyEnum)). Length;
Puede utilizar 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 al número de elementos definidos en la enumeración
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;