Tengo el siguiente código:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
Sin embargo, no puedo indexar valores. ¿Hay una manera más fácil de hacer esto?
¡O me he perdido algo por completo!
Enum.GetName(typeof(MyEnum), val), (int)val)
de que la salida proporcione el nombre y el número de enumeración.Cast<T>
al resultado:Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>()...
Debe convertir la matriz; la matriz devuelta es en realidad del tipo solicitado, es decir,
myEnum[]
si solicitatypeof(myEnum)
:Entonces,
values[0]
etc.fuente
Puede convertir esa matriz a diferentes tipos de matrices:
o si quieres los valores enteros:
Puede iterar esas matrices fundidas, por supuesto :)
fuente
¿Qué tal una lista de diccionarios?
y, por supuesto, puede cambiar el tipo de valor del diccionario a cualquiera que sea su enumeración.
fuente
Otra solución, con interesantes posibilidades:
fuente
Aquí está otro. Tuvimos la necesidad de proporcionar nombres descriptivos para nuestros EnumValues. Usamos System.ComponentModel.DescriptionAttribute para mostrar un valor de cadena personalizado para cada valor de enumeración.
En uso
Esto terminará mostrando "Algo 1", "Algo 2"
fuente
¿Qué hay de usar un bucle foreach, tal vez podrías trabajar con eso?
tal vez algo así?
fuente
Pregunta antigua, pero un enfoque un poco más limpio con LINQ
.Cast<>()
fuente
Array tiene un método GetValue (Int32) que puede usar para recuperar el valor en un índice específico.
Array.GetValue
fuente
Puede simplificar esto usando cadenas de formato. Utilizo el siguiente fragmento en los mensajes de uso:
El especificador de formato D formatea el valor de enumeración como decimal. También hay un especificador X que proporciona una salida hexadecimal.
El especificador G formatea una enumeración como una cadena. Si el atributo Flags se aplica a la enumeración, también se admiten los valores combinados. Hay un especificador F que actúa como si Flags estuviera siempre presente.
Consulte Enum.Format ().
fuente
En los resultados de Enum.GetValues, la conversión a int produce el valor numérico. El uso de ToString () produce el nombre descriptivo. No se necesitan otras llamadas a Enum.GetName.
fuente
Aquí hay una forma sencilla de iterar a través de su objeto Enum personalizado
fuente
Pregunta antigua, pero la respuesta de 3Dave proporcionó el enfoque más fácil. Necesitaba un pequeño método auxiliar para generar un script Sql para decodificar un valor de enumeración en la base de datos para la depuración. Funcionó muy bien:
Lo tengo en un método estático, por lo que el uso es:
fuente