Nombre Total d'éléments définis dans un enum

Comment puis-je obtenir le nombre d'éléments définis dans un enum?

255
demandé sur Timothy Shields 2009-05-13 09:06:36

9 réponses

Vous pouvez utiliser la méthode statique Enum.GetNames qui retourne 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;
340
répondu Kasper Holdum 2018-05-04 12:24:57

la question Est:

Comment puis-je obtenir le nombre d'éléments définis dans un enum?

le nombre de "items" pourrait vraiment signifier deux choses complètement différentes. Considérons 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 MyEnum ?

Est le nombre d'éléments 5? ( A , B , C , D , E )

ou est-ce 3? ( 1 , 2 , 3 )

le nombre de noms définis dans MyEnum (5) peut être calculé comme suit.

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

le nombre de valeurs définies dans MyEnum (3) peut être calculé comme suit.

var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
157
répondu Timothy Shields 2015-01-20 17:18:30

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

68
répondu Matt Hamilton 2014-11-26 10:59:09

Un truc brillant, j'ai vu dans la réponse à cette question, il suffit d'ajouter un dernier élément de l'énumération et de l'utiliser pour savoir combien d'éléments sont dans l'enum:

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

dans le cas où vous définissez une valeur de départ autre que 0, Vous pouvez utiliser NumberOfTypes - Type1 pour déterminer le nombre d'éléments.

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

11
répondu Josh 2013-06-05 17:29:18

des réponses précédentes en ajoutant seulement un échantillon de code.

 class Program
    {
        static void Main(string[] args)
        {
            int enumlen = Enum.GetNames(typeof(myenum)).Length;
            Console.Write(enumlen);
            Console.Read();
        }
        public enum myenum
        {
            value1,
            value2
        }
    }
6
répondu jvanderh 2009-05-13 05:17:36

vous pouvez utiliser Enum.Getnames a le retour d'un IEnumerable de valeurs dans votre enum et puis .Compter le résultat IEnumerable.

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

5
répondu Lucas Willett 2009-05-13 05:10:03

si vous vous trouvez à écrire la solution ci-dessus aussi souvent que je le fais, alors vous pouvez l'implémenter comme un générique:

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;
}
2
répondu Matt Parkins 2016-09-19 11:08:57

j'étais en train d'étudier cela tout à l'heure, et je n'étais pas content de la lisibilité de la solution actuelle. Si vous écrivez le code de manière informelle ou sur un petit projet, vous pouvez juste ajouter un autre élément à la fin de votre enum appelé "Longueur". De cette façon, vous n'avez qu'à taper:

var namesCount = (int)MyEnum.Length;

bien sûr si d'autres vont utiliser votre code - ou je suis sûr que dans beaucoup d'autres circonstances qui ne s'appliquent pas à moi dans ce cas - cette solution peut être n'importe où de mal conseillé à terrible.

1
répondu EnergyWasRaw 2014-11-12 23:07:00

Pour Visual Basic:

[Enum].GetNames(typeof(MyEnum)).Length n'a pas fonctionné avec moi, mais [Enum].GetNames(GetType(Animal_Type)).length did.

1
répondu S22 2018-02-22 19:01:18