Nombre Total d'éléments définis dans un enum
Comment puis-je obtenir le nombre d'éléments définis dans un enum?
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;
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();
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.
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
}
}
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.
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;
}
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.
Pour Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
n'a pas fonctionné avec moi, mais
[Enum].GetNames(GetType(Animal_Type)).length
did.