c# net Gesamtzahl der in einer Aufzählung definierten Elemente




vb.net checkedlistbox checked items (8)

Wie kann ich die Anzahl der in einer Aufzählung definierten Artikel ermitteln?


Von den vorherigen Antworten nur Codebeispiel hinzufügen.

 class Program
    {
        static void Main(string[] args)
        {
            int enumlen = Enum.GetNames(typeof(myenum)).Length;
            Console.Write(enumlen);
            Console.Read();
        }
        public enum myenum
        {
            value1,
            value2
        }
    }

Wenn Sie feststellen, dass Sie die obige Lösung so oft schreiben wie ich, dann könnten Sie sie als generisches implementieren:

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;
}


Ich habe gerade erst darüber nachgedacht und war mit der Lesbarkeit der aktuellen Lösung nicht zufrieden. Wenn Sie informell oder in einem kleinen Projekt Code schreiben, können Sie einfach ein anderes Element am Ende Ihrer Enum namens "Länge" hinzufügen. Auf diese Weise müssen Sie nur Folgendes eingeben:

var namesCount = (int)MyEnum.Length;

Natürlich, wenn andere Ihren Code verwenden werden - oder ich bin mir sicher, dass unter vielen anderen Umständen, die in diesem Fall nicht auf mich zutreffen - diese Lösung irgendwo von schlecht bis schrecklich sein kann.


Ein raffinierter Trick, den ich in einer C-Antwort auf diese Frage sah, füge einfach ein letztes Element zum Enum hinzu und benutze es, um zu sagen, wie viele Elemente im Enum sind:

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

Wenn Sie einen anderen Startwert als 0 definieren, können Sie mit NumberOfTypes - Type1 die Anzahl der Elemente ermitteln.

Ich bin mir nicht sicher, ob diese Methode schneller ist als die Verwendung von Enum, und ich bin mir auch nicht sicher, ob dies als der richtige Weg angesehen wird, da wir Enum haben, um diese Information für uns zu ermitteln.


Sie können Enum.GetNames verwenden, um ein IEnumerable von Werten in Ihrer Enumeration zurückzugeben, und dann .Count das resultierende IEnumerable.

GetNames erzeugt fast das gleiche Ergebnis wie GetValues, ist aber schneller.


Die Frage ist:

Wie kann ich die Anzahl der in einer Aufzählung definierten Artikel ermitteln?

Die Anzahl der "Gegenstände" könnte wirklich zwei völlig verschiedene Dinge bedeuten. Betrachten Sie das folgende Beispiel.

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

Wie viele "Elemente" gibt es in MyEnum ?

Ist die Anzahl der Gegenstände 5? ( A , B , C , D , E )

Oder ist es 3? ( 1 , 2 , 3 )

Die Anzahl der in MyEnum (5) definierten Namen kann wie folgt berechnet werden.

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

Die Anzahl der in MyEnum (3) definierten Werte kann wie folgt berechnet werden.

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

Sie können die statische Methode Enum.GetNames die ein Array zurückgibt, das die Namen aller Elemente in der Enumeration darstellt. Die length-Eigenschaft dieses Arrays entspricht der Anzahl der in der enum definierten Elemente

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




enums