Jak mogę uzyskać liczbę elementów zdefiniowanych w wyliczeniu?
318
Możesz użyć metody statycznej, Enum.GetNames
która zwraca tablicę reprezentującą nazwy wszystkich elementów w wyliczeniu. Właściwość length tej tablicy jest równa liczbie elementów zdefiniowanych w wyliczeniu
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Pytanie brzmi:
Liczba „przedmiotów” może naprawdę oznaczać dwie zupełnie różne rzeczy. Rozważ następujący przykład.
Jaka jest liczba „przedmiotów” zdefiniowanych w
MyEnum
?Czy liczba pozycji wynosi 5? (
A
,B
,C
,D
,E
)Czy to jest 3? (
1
,2
,3
)Liczbę nazw zdefiniowanych w
MyEnum
(5) można obliczyć w następujący sposób.Liczbę wartości zdefiniowanych w
MyEnum
(3) można obliczyć w następujący sposób.źródło
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
.Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;).Enum.GetValues (typeof ( MyEnum )). Długość;
źródło
Sprytna sztuczka, którą widziałem w odpowiedzi C na to pytanie, po prostu dodaj ostatni element do wyliczenia i użyj go, aby powiedzieć, ile elementów jest w tym wyliczeniu:
W przypadku, gdy definiujesz wartość początkową inną niż 0, możesz użyć NumberOfTypes - Type1, aby ustalić liczbę elementów.
Nie jestem pewien, czy ta metoda byłaby szybsza niż używanie Enum, a także nie jestem pewien, czy uznano by to za właściwy sposób, aby to zrobić, ponieważ mamy Enum do sprawdzenia dla nas tych informacji.
źródło
Z poprzednich odpowiedzi po prostu dodałem przykładowy kod.
źródło
Możesz użyć Enum.GetNames, aby zwrócić IEnumerable wartości w twoim enum, a następnie .Count wynikowy IEnumerable.
GetNames daje taki sam wynik jak GetValues, ale jest szybszy.
źródło
Jeśli zauważysz, że piszesz powyższe rozwiązanie tak często jak ja, możesz zaimplementować je jako ogólne:
źródło
Właśnie się tym zajmowałem i nie byłem zadowolony z czytelności obecnego rozwiązania. Jeśli piszesz kod nieformalnie lub w małym projekcie, możesz po prostu dodać kolejny element na końcu wyliczenia o nazwie „Długość”. W ten sposób wystarczy wpisać:
Oczywiście, jeśli inni zamierzają użyć twojego kodu - lub jestem pewien, że w wielu innych okolicznościach, które nie dotyczyły mnie w tym przypadku - to rozwiązanie może być gdziekolwiek, od złej porady po straszne.
źródło
W przypadku Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
nie działało ze mną, ale działało[Enum].GetNames(GetType(Animal_Type)).length
.źródło