Enum als Dictionary

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Enum als Dictionary

    Hallo,

    ich habe eine Zuordnung von Begriffen zu Zahlen. Das erste was mir sofort eingefallen ist sind Enums.
    Dann wollte ich die Zuordnung darstellen, was erstmal tricky aussah.
    Die Darstellung ist beim Enum ja generell nicht nötig, das heißt diese Zuordnung hat eigentlich auch einen Dictionary Charakter.

    Naja jetzt überlege ich ob man sich da mehr Gedanken machen sollte über Dictionary(Of Integer, String) vs Enum

    Konkreter Fall bei mir jetzt, ich habe ein Enum, nutze das auch ganz typisch codeseitig. Aber dann mache ich noch das hier:

    VB.NET-Quellcode

    1. Private Sub LoadMenuStripInfoArtikelklasse()
    2. Dim tabMenuItems = ArtikelklassenübersichtToolStripMenuItem.DropDownItems
    3. Dim values = [Enum].GetValues(GetType(Typ))
    4. For Each n In values
    5. tabMenuItems.Add($"{CInt(n)} = {n}")
    6. Next
    7. End Sub


    Viele Grüße
    Wo liegt das Problem?
    Enum ist ein eigenständiger Type, der wie ein Integer und Co behandelt werden kann.
    Für ein Dictionary ist schon ein wenig Logistik erforderlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich seh grad keine Frage. Aber meine Überlegung: Wenn alle Werte bereits fix zum Designzeitpunkt feststehen, notfalls selten mal durch äußere Einflüsse (z.B. Gesetzesänderungen) geändert werden müssen, dann Enum. Wenn das ganze deutlich häufiger mal geändert werden muss, dann Dictionary. Oder ne tDS-Tabelle, falls Du in dem betroffenen Programm damit arbeitest.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Haudruferzappeltnoch Und bedenke: Ein Enum ist ein ValueType, ein Dictionary-Eintrag ein ReferenzType.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Solltest Du vorhaben, nur die anzuzeigende Bezeichnung/Beschreibung* zu ändern, dann ok. Bei Änderungen der Einträge (Löschen/Hinzufügen) musst Du aufpassen und explizite EnumWerte vergeben und darfst alte EnumWerte erst dann löschen, wenn kein Datensatz mehr den gelöschten EnumWert hat.
    Beispiel:

    VB.NET-Quellcode

    1. Enum DeviceType
    2. Printer
    3. Camera
    4. Scanner
    5. End Enum

    Dann kannst Du zwar jetzt für Deine tDS-/DB-Einträge für die Geräte den DeviceType festlegen. Aber wenn Eure Firma jetzt entscheidet, dass Drucker rausfliegen und Smartphones dazukommen, hättest Du Datenchaos, wenn Du keine EnumWerte vergeben hättest und Du Printer einfach löschst oder durch Smartphone ersetzt. Daher solltest Du z.B. schreiben:

    VB.NET-Quellcode

    1. Enum DeviceType
    2. Printer = 0
    3. Camera = 1
    4. Scanner = 2
    5. Smartphone = 3
    6. End Enum

    Und Du dürftest - wie geschrieben und falls überhaupt sinnvoll (Stichwort alte Daten oder Protokolle oder Archive) - den ersten Eintrag erst dann löschen, wenn kein tDS-/DB-Eintrag mehr den EnumWert 0 bzw. Printer hat, sonst gibbet Fehlermeldungen oder komische Anzeigen. Am besten dann obsolete Werte drinlassen und ein Kommentar dazu, dass dieser Wert nicht mehr benötigt wird, aber für die Datenkonsistenz drinbleiben muss.

    Ich zeige häufiger Enum-Wert-Beschreibungen* an. Bankkontotypen, Berufsgruppen, Artikelkategorien usw. Diese ändern sich eigentlich nie. Es kann natürlich sein, dass was neues erfunden wird, aber dann ist die Ergänzung einfach.

    * falls noch nicht bekannt: siehe Enum-Beschreibungen verwenden und anzeigen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.