Comment puis-je obtenir le nombre d'éléments définis dans une énumération ?
D'accord ... voici un lien que j'ai trouvé csharp411.com/compte-items-in-an-enum
Comment puis-je obtenir le nombre d'éléments définis dans une énumération ?
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;
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();
Autre façon d'écrire la dernière ligne, var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
.
Je ne vois aucun développeur que j'ai rencontré dans ma vie qui affirmerait qu'une telle énumération contient 3 éléments.
Enum.GetValues (typeof(MyEnum)).Length ;
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.
Cool, ce serait aussi plus rapide que GetNames() parce qu'il n'y a pas besoin de les compter.
Méfiez-vous des codes qui parcourent les enums via foreach - vous pouvez lire la fin de vos tableaux !
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.