Anwendung einer ENUM-Extension

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Anwendung einer ENUM-Extension

    Moin!

    in ENUM - cint und tostring verkoppeln hat man mir den Tipp gegeben eine ENUM-Extension zu verwenden.

    Zu meiner Umgebung.

    Ich habe eine Klasse in der die ENUM's definiert sind. Diese befindet sich in einem Projekt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class TBD
    2. '------ http://ms-wiki-1/eblwiki/index.php?title=TBD_(Klasse_von_EBL.Parameter) ------
    3. ''' <summary>
    4. ''' welche FeatureClass ist anzulegen
    5. ''' </summary>
    6. Public Enum FeatureClasses
    7. WW_Manhole
    8. AW_Pumpwerk
    9. AW_ANSCHLUSSPUNKT
    10. End Enum
    11. '------- Aktiv oder nicht, hier gelistet auch, wenn keine richtige TBD
    12. Public Enum ActivStatus
    13. undefiniert = -1
    14. Ja = 1
    15. Nein = 0
    16. End Enum
    17. '------- Verbindungsart ------- siehe WW_FITTING_FUNCTION_TBD
    18. Public Enum Fitting
    19. undefiniert = -1 ' von der Programmierung ergänzt
    20. EntwRinneZuAblauf = 9
    21. Gebäudeanschluss = 10
    22. Regenfallrohr = 11
    23. Straßenablauf = 12
    24. NN = 13
    25. RohrEndeVerschlossen = 15 ' auch als Verschlussteller bezeichnet
    26. EntwImGebaeude = 16
    27. StutzenRechts = 101
    28. StutzenLinks = 102
    29. AbzweigerRechts = 103
    30. AbzweigerLinks = 104
    31. StutzenOben = 105
    32. StutzenUnten = 106
    33. AbzweigerOben = 107
    34. AbzweigerUnten = 108 ' gilt auch für Absturz
    35. Ablauf_aussenliegend = 1001
    36. Ablauf_innenliegend = 1002
    37. Spülstutzen_mit_Schacht = 1003
    38. Spülstutzen_mit_Kappe = 1004
    39. Roste_mittig = 1005
    40. Roste_seitlich = 1006
    41. ReinigungsOeffnung = 1007 'Revisionsöffnung
    42. End Enum
    43. End Class



    In einem anderen Projekt habe ich einen Verweis auf dieses Projekt gelegt.

    An der Stelle, wo ich auf das Enum zugreifen will habe ich dieses eingebunden.

    VB.NET-Quellcode

    1. Private _fGlobalTbd As New EBL.Global.TBD
    2. _fGlobalTbd.Fitting.Regenfallrohr


    Ich möchte nun einen Konvertierung auf die Werte der ENUM's verwenden.

    Wie gesagt hat man mir den Tipp der EnumExtensions gegeben.

    In das Projekt mit den ENUM-Definitionen habe ich ein Modul eingefügt und dort die Extension eingebaut.

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Module EnumExtensions
    3. <System.Runtime.CompilerServices.Extension()>
    4. Public Function GetEnumString(enumVal As [Enum]) As String
    5. Return enumVal.ToString
    6. End Function
    7. <System.Runtime.CompilerServices.Extension()>
    8. Public Function GetEnumInt(enumVal As [Enum]) As Integer
    9. Return Convert.ToInt32(enumVal)
    10. End Function
    11. End Module


    Aber wenn ich jetzt im Code, wo ich auf die Konvertierung zugereifen will, im Kontextmenü nachschaue, dann ist da kein GetEnumString bzw. GetEnumInt zu finden.

    Habe ich da einen generellen Verständnisfehler? Ist vielleicht etwas falsch bei dem Zugriff auf das andere Projekt?

    Gruß Jan
    Dann schnapp dir das 2010er Buch vom loeffel und lern noch mal die Grundlagen. So viele Jahre dabei und du kannst nicht das, was man in der FIAE Ausbildung vermutlich in der ersten Woche lernt. Das gehört zu den fundamentalen Grundlagen. Evtl. hilft es dir den Artikel auf Wikipedia dazu zu lesen.(Zugriffsmodifikator)

    Ich könnte es dir vorsagen, aber dann lernste nix.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @DTF Da sollte doch eigentlich die Fehlermeldung ein klares Wort sprechen.
    @jan99 Befinden sich beide Projekte in einer gemeinsamen Projektmappe?
    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!
    Der Link zu den Erweiterungsmethoden in deinem anderem Thread ist meiner Meinung nach verbesserungswürdig. Erweiterungsmethoden (C#-Programmierhandbuch) ist da etwas besser aber leider ohne VB Beispiele.
    Dort heißt es: "Erweiterungsmethoden werden als statische Methoden definiert", richtig in VB sollte dann: public shared GetEnumInt sein. Integer zu Integer zu konvertieren ist auch fragwürdig. DirectCast sollte hier ausreichen und GetEnumString braucht man doch eigentlich auch nicht.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Fakiz“ ()

    Fakiz schrieb:

    GetEnumString braucht man doch eigentlich auch nicht.

    jo, stattdessen muss man umständlich schreiben: Dim sEnum = cint(theEnum).Tostring
    Ich denke auch, da sollte man keine Extension von machen, weil da steckt ja ein Architekturfehler drin:
    Nämlich dass des TEs Kollege darauf besteht, Integers als String zu verarbeiten - eiglich ein Unding.
    Und dieses Unding würde ich nicht grade mit einer Extension zementieren wollen.
    Sondern da muss der Code halt hässlich aussehen - ebenso hässlich wie die architektonischen Vorgaben des Kollegen.

    (Eine schöne Lösung bestünde vielleicht darin, dass der Kollege lernt, mit Enums umzugehen.)
    Moin!

    ich versuche einmal von daheim von Smartphone zu antworten...

    @RodFromGermany: ja, sie liegen in einer Projektmappe

    @ErfinderDesRades: ich will auch erklären, warum ich Integers als String verarbeiten will. Diese sollen in SQL Ausdrücke eingebunden werden. Da ist die Basis eine Zeichenkette und Werte werden unter anderem über die Enums eingebunden. Das ganze wird dann über String.Format verbunden. Dafür brauche ich das Konvertieren.

    Gute Nacht und bis morgen.

    Jan
    Denke auch Enums sind nich zum konvertieren da, sonst wärns ja keine enums, sondern Sammlungen des jeweiligen Datentyps.
    Werte werden in Sql als der Datentyp eingespeist, der sie sind, mittels Parameter. Ich denke mal enum als Integer zu verstehen kriegt der vielleicht sogar noch von allein hin.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    jan99 schrieb:

    Da ist die Basis eine Zeichenkette und Werte werden unter anderem über die Enums eingebunden. Das ganze wird dann über String.Format verbunden. Dafür brauche ich das Konvertieren.
    Zunächstmal siehe Vorpost - es scheint (bei deim Kollegen?) an Kenntnis der DbParameter zu mangeln.

    Zum andern brauchst auch String.Format keine Konvertierung nach String - es kommt sehr gut mit Integer klar.

    VB.NET-Quellcode

    1. s = String.Format("{0} Mäuse", 5.ToString())
    2. 'ergibt dasselbe wie
    3. s = String.Format("{0} Mäuse", 5)

    Und heutzutage verwendet man String.Format auch garnimmer, sondern so:

    VB.NET-Quellcode

    1. s =$"{5} Mäuse"
    Das solltest du mal im VS ausprobieren - im vbParadise-Post sieht das ganz falsch aus, v.a. wenn man diese Formatierungs-Technik (namens "String-Interpolsation") nicht kennt.
    Moin!

    ErfinderDesRades schrieb:

    jan99 schrieb:

    Dafür brauche ich das Konvertieren.
    Zunächstmal siehe Vorpost - es scheint (bei deim Kollegen?) an Kenntnis der DbParameter zu mangeln.


    ich verstehe nicht was Du meinst! Was hat das Erstellen eines SQL-Ausdruck mit DbParametern zu tun?

    ErfinderDesRades schrieb:

    jan99 schrieb:



    Auf der einen Seite heißt es immer man soll richtig konvertieren und nun kommt String.Format mit integern klar.

    Wenn dem so ist und sonst das Programm nicht mault, dann kann ich auch immer

    VB.NET-Quellcode

    1. cint(Enum-Wert)


    schreiben - das ist gleich aufwendig.

    Gruß Jan
    wenn du doch eine Datenbank hast warum werte in ENUM verpacken ?
    die Datenbank Tablle kannst du erweitern wie du willst, abfragen mit DataReader unw.

    stell dir vor du mussten dein ENUM Fitting erweitern um

    VB.NET-Quellcode

    1. '...
    2. StutzenRechts = 101
    3. StutzenLinks = 102
    4. AbzweigerRechts = 103
    5. AbzweigerLinks = 104
    6. StutzenOben = 105
    7. StutzenUnten = 106
    8. '...
    9. StutzenMitte = 1001
    10. AbzweigerMitte= 1002
    11. Abzweiger90Grad= 1003


    jan99 schrieb:

    nun kommt String.Format mit integern klar.

    Das gilt nicht nur für String.Format sondern für alle Klassen die mit FormattableString hantieren.

    MSDN schrieb:

    ...The formatting operation yields a result string that consists of the original fixed text intermixed with the string representation of the objects in the list.