Ich habe einige Aufzählungen gelesen und finde, dass sie der Deklaration von Konstanten sehr ähnlich sind. Wie würde ich wissen, wann ich eine Konstante anstelle einer Aufzählung verwenden soll oder umgekehrt? Was sind einige der Vorteile der Verwendung von Aufzählungen?
c#
language-agnostic
enums
Draco
quelle
quelle
Antworten:
Verwenden Sie Aufzählungen, wenn Sie einen Wertebereich definieren möchten, der etwas sein kann. Farbe ist ein offensichtliches Beispiel wie:
Oder vielleicht eine Reihe möglicher Dinge wie: (Beispiel, das ich von hier gestohlen habe, weil ich faul bin)
Konstanten sollten für einen einzelnen Wert wie PI gelten. Es gibt keinen Bereich von PI-Werten, es gibt nur PI.
Weitere zu berücksichtigende Punkte sind:
quelle
.ToString()
viel für die Aufzählung verwenden, einen Wert für die Verwendung einer Klasse mit const-Zeichenfolgen, die wie eine Aufzählung aussieht und sich verhält, aber einen Aufruf von umgehtToString()
? BeispielType Safety"
Was in den anderen Antworten fehlt, ist, dass Aufzählungen einen ganzzahligen Basistyp haben. Sie können die Standardeinstellung von int in einen anderen Integraltyp ändern, außer char wie:
Sie können explizit von und implizit in den Basistyp umwandeln, was in switch-Anweisungen hilfreich ist. Beachten Sie, dass jeder Wert des Basistyps in eine Aufzählung umgewandelt werden kann, auch wenn die Aufzählung kein Mitglied mit dem entsprechenden Wert enthält. Es ist daher eine gute Idee, immer den Standardabschnitt in einem Switch zu verwenden. Übrigens erlaubt .NET selbst sogar Aufzählungen mit Gleitkommawerten, aber Sie können sie nicht in C # definieren, obwohl ich denke, dass Sie sie weiterhin verwenden können (außer in switch).
Darüber hinaus bietet die Verwendung von Aufzählungen mehr Typensicherheit. Wenn Sie beispielsweise int-Konstanten als Methodenparameter verwenden möchten, kann ich die Methode mit einem beliebigen int-Wert aufrufen. Zugegeben, durch Casting kann es auch mit Aufzählungen passieren, aber es wird nicht versehentlich passieren. Schlimmer ist die Möglichkeit, die Reihenfolge der Parameter zu verwechseln.
Wenn die Konstante A nur in a und die Konstante B nur in b gehen darf, wird durch die Verwendung von zwei verschiedenen Aufzählungstypen ein Missbrauch während der Kompilierung aufgedeckt.
quelle
Eine Konstante ist eine Sprachfunktion, die besagt, dass die Variable den Wert nicht ändert (damit der Compiler Optimierungen für dieses Wissen vornehmen kann), wenn eine Aufzählung ein bestimmter Typ ist.
Konstanten können ein beliebiger Datentyp sein, aber eine Aufzählung ist eine Aufzählung.
Ich verwende eine Aufzählung an jedem Ort, an dem Sie eine Reihe von Optionen haben und die Lesbarkeit des Codes verbessern möchten. Das heißt, Sie können Trace-Ebenen als int mit den Werten 0, 1, 2 oder als Aufzählung als Fehler, Warnung und Info haben.
Aufzählungen können auch als bitweise Operatoren verwendet werden, z. B. FontStyle.Bold | FontStyle.Italic würde Ihnen fette und kursive Schriftarten geben.
quelle
Zusätzlich zu Roberts Antwort:
Verwenden Sie enum für eine endliche Menge benannter Werte. Sie interessieren sich nicht wirklich für den numerischen Wert hinter jedem Symbol (aber Sie haben immer noch die Möglichkeit, ihn aufzuerlegen, z. B. aus Gründen der Kompatibilität mit einem Legacy-System).
Robert: Ja, Enums können als Bitfelder verwendet werden. Verwenden Sie das Flags- Attribut (und stellen Sie sicher, dass die Mitglieder der Aufzählung geeignete numerische Werte haben).
quelle
Die AC # -Konstante ähnelt einer Variablen darin, dass sie einem Wert einen definierten Namen gibt. Eine Konstante unterscheidet sich jedoch von einer Standardvariablen, da der der Konstante zugewiesene Wert nach seiner Definition niemals geändert werden kann. Der Hauptvorteil von Konstanten ist ihre Unterstützung bei der Erstellung von selbstdokumentierendem Code sowie die Ermöglichung der Deklaration von Schlüsselwerten an einem einzigen Ort, was eine einfache Wartung ermöglicht, falls der Wert aktualisiert und die Software neu kompiliert werden muss.
Enumerator-Listen sind nützlich, um Sequenzen und Zustände zu definieren, insbesondere wenn diese Zustände auf natürliche Weise fortschreiten. Dies liegt daran, dass jede Konstante in der Liste entweder mit ihrem Namen oder ihrem Wert formatiert und verglichen werden kann. Eine Aufzählung kann auch verwendet werden, um einen begrenzten Satz gültiger Werte zu definieren.
quelle
Eine Sache, die ich bei der Verwendung
enum
anstelle von nützlich finde,const
ist, dass Sie die Werte in einem durchlaufen könnenenum
. Es ist viel schwieriger, dies mitconst
Werten zu tun .quelle