J'ai le code suivant:
// 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] );
}
Cependant, je ne peux pas indexer les valeurs. Existe-t-il un moyen plus simple de le faire?
Ou ai-je manqué quelque chose d'entièrement!
Enum.GetName(typeof(MyEnum), val), (int)val)
dans lequel la sortie fournit le nom et le numéro de l'énumération.Cast<T>
le résultat:Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>()...
Vous devez transtyper le tableau - le tableau retourné est en fait du type demandé, c'est
myEnum[]
-à- dire si vous demandeztypeof(myEnum)
:Puis
values[0]
etcla source
Vous pouvez convertir ce tableau en différents types de tableaux:
ou si vous voulez les valeurs entières:
Vous pouvez bien sûr itérer ces tableaux coulés :)
la source
Que diriez-vous d'une liste de dictionnaires?
et bien sûr, vous pouvez changer le type de valeur du dictionnaire en quelles que soient vos valeurs d'énumération.
la source
Une autre solution, avec des possibilités intéressantes:
la source
En voici une autre. Nous avions besoin de fournir des noms conviviaux pour nos EnumValues. Nous avons utilisé le System.ComponentModel.DescriptionAttribute pour afficher une valeur de chaîne personnalisée pour chaque valeur d'énumération.
Utilisé
Cela finira par renvoyer "Quelque chose 1", "Quelque chose 2"
la source
Et si vous utilisiez une boucle foreach, vous pourriez peut-être travailler avec ça?
quelque chose comme ça peut-être?
la source
Ancienne question, mais une approche légèrement plus claire utilisant LINQ
.Cast<>()
la source
Array a une méthode GetValue (Int32) que vous pouvez utiliser pour récupérer la valeur à un index spécifié.
Array.GetValue
la source
Vous pouvez simplifier cela en utilisant des chaînes de format. J'utilise l'extrait suivant dans les messages d'utilisation:
Le spécificateur de format D met en forme la valeur d'énumération sous forme décimale. Il existe également un spécificateur X qui donne une sortie hexadécimale.
Le spécificateur G formate une énumération sous forme de chaîne. Si l'attribut Flags est appliqué à l'énumération, les valeurs combinées sont également prises en charge. Il existe un spécificateur F qui agit comme si Flags était toujours présent.
Voir Enum.Format ().
la source
Dans les résultats Enum.GetValues, la conversion en int produit la valeur numérique. L'utilisation de ToString () produit le nom convivial. Aucun autre appel à Enum.GetName n'est nécessaire.
la source
Voici un moyen simple de parcourir votre objet Enum personnalisé
la source
Question ancienne, mais la réponse de 3Dave a fourni l'approche la plus simple. J'avais besoin d'une petite méthode d'aide pour générer un script Sql pour décoder une valeur enum dans la base de données pour le débogage. Cela a très bien fonctionné:
Je l'ai dans une méthode statique, donc l'utilisation est:
la source