391 votes

Nombre total d'éléments définis dans une énumération

Comment puis-je obtenir le nombre d'éléments définis dans une énumération ?

527voto

Kasper Holdum Points 4173

Vous pouvez utiliser la méthode statique Enum.GetNames qui renvoie un tableau représentant les noms de tous les éléments de l'énumération. La propriété length de ce tableau est égale au nombre d'éléments définis dans l'enum

var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;

1 votes

D'accord ... voici un lien que j'ai trouvé csharp411.com/compte-items-in-an-enum

11 votes

On pourrait également utiliser Enum.GetValues.

6 votes

System.Enum.GetNames, si vous n'incluez pas déjà l'espace de noms System.

191voto

Timothy Shields Points 17970

La question est la suivante :

Comment puis-je obtenir le nombre d'éléments définis dans une énumération ?

Le nombre d'"articles" peut avoir deux significations complètement différentes. Prenons l'exemple suivant.

enum MyEnum
{
    A = 1,
    B = 2,
    C = 1,
    D = 3,
    E = 2
}

Quel est le nombre d'"éléments" définis dans le document MyEnum ?

Le nombre d'éléments est-il de 5 ? A , B , C , D , E )

Ou plutôt 3 ( 1 , 2 , 3 )

Le nombre de noms défini dans MyEnum (5) peut être calculée comme suit.

var namesCount = Enum.GetNames(typeof(MyEnum)).Length;

Le nombre de valeurs défini dans MyEnum (3) peut être calculée comme suit.

var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();

2 votes

Autre façon d'écrire la dernière ligne, var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count(‌​); .

7 votes

Je ne vois aucun développeur que j'ai rencontré dans ma vie qui affirmerait qu'une telle énumération contient 3 éléments.

2 votes

@motoDrizzt vous pouvez trouver quelque chose comme ça dans une énumération d'un pilote d'imprimante comme Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ... ;).

78voto

Matt Hamilton Points 98268

Enum.GetValues (typeof(MyEnum)).Length ;

11 votes

Il est plus rapide d'utiliser la méthode GetNames.

17voto

Josh Points 91

Une astuce astucieuse que j'ai vue dans une réponse en C à cette question, consiste à ajouter un dernier élément à l'énumération et à l'utiliser pour dire combien d'éléments il y a dans l'énumération :

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

Dans le cas où vous définissez une valeur de départ différente de 0, vous pouvez utiliser NumberOfTypes - Type1 pour déterminer le nombre d'éléments.

Je ne suis pas sûr que cette méthode soit plus rapide que l'utilisation d'Enum, et je ne suis pas sûr non plus qu'elle soit considérée comme la bonne façon de faire, puisque nous avons Enum pour vérifier cette information pour nous.

1 votes

C'est bien car je peux le faire sur XNA car GetNames n'y est pas disponible

0 votes

Cool, ce serait aussi plus rapide que GetNames() parce qu'il n'y a pas besoin de les compter.

4 votes

Méfiez-vous des codes qui parcourent les enums via foreach - vous pouvez lire la fin de vos tableaux !

6voto

Lucas Willett Points 331

Vous pouvez utiliser Enum.GetNames pour renvoyer un IEnumerable de valeurs dans votre enum et ensuite. Count l'IEnumerable résultant.

GetNames produit à peu près le même résultat que GetValues mais est plus rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X