ENUM - cint und tostring verkoppeln

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von wolfi_bayern.

    ENUM - cint und tostring verkoppeln

    Moin!

    eigentlich wollte ich diese Frage an Werte bei ENUM auswerten anhängen, aber es ist wohl besser einen eigenständigen Post zu machen.

    Ich habe eine Klasse mit ENUM-Definitionen.

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Betriebsstatus - siehe WW_DISPOSITION_STATE_TBD
    3. ''' </summary>
    4. Public Enum Disposition As Integer
    5. undefiniert = -1 ' von der Progrmamierung eingefügt
    6. verdämmt_verfüllt = 2
    7. inBetrieb = 6 'Standardwert
    8. nichtBetrieb = 10
    9. geplant = 15
    10. modelltechnische_Gründe = 16
    11. RueckbauEntfernt = 17 'Standardwert
    12. noch_nicht_in_Betrieb = 1003
    13. InspRead = 1004
    14. InspTrans = 1005
    15. End Enum


    Auf diese greife ich nun zu

    VB.NET-Quellcode

    1. Dim fGlobalTbd As New EBL.Global.TBD
    2. fGlobalTbd.Disposition.InspTrans


    Im Anschluss brauche ich den Wert als Zeichenkette.

    VB.NET-Quellcode

    1. fGlobalTbd.Disposition.InspTrans.ToString


    liefert den Namen (InspTrans).

    Wenn ich den Integer haben will muss ich folgendes machen - soweit waren wir in dem anderen Posting schon.

    VB.NET-Quellcode

    1. cInt(fGlobalTbd.Disposition.InspTrans)


    Nun möchte ich davon die Zeichenkette haben und das würde "umständlich" so gehen:

    VB.NET-Quellcode

    1. cInt(fGlobalTbd.Disposition.InspTrans).ToString


    Das ist viel Schreiberei und damit fehleranfällig. Deshalb habe ich mir folgendes gebastelt:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' gibt die Konstantenwerte als String zurück
    3. ''' </summary>
    4. ''' <param name="Wert">in String zu konvertierender String</param>
    5. ''' <returns>Zeichenkette</returns>
    6. Private Function AsString(Wert As Integer) As String
    7. Return CInt(Wert).ToString
    8. End Function


    Dann ist der Aufruf:

    VB.NET-Quellcode

    1. AsString(_fGlobalTbd.Disposition.InspTrans)


    nun zu meiner Frage: geht das auch einfacher oder zentraler (wird viel gebraucht für verschiedene ENUM), vielleicht schon in der Klasse in welcher das ENUM definiert wurde?

    Ich habe schon einmal davon gehört das man soetwas wie .tostring überschreiben kann.

    In diesem Zusammenhang habe ich aber noch keine Vererbung und Überschreibung gemacht.

    Vielleicht liege ich auch völlig falsch - kann mir einer weiterhelfen?

    Gruß Jan
    Du brauchst kein Enum, du brauchst ein Dictionary(Of Integer, String).
    Übersetzen von Int nach String, ja?

    Wenn beide Richtungen klappen sollen, dann braucht man zwei Dictionaries, wenn es effizient sein soll.

    Aber mal anders gedacht, wenn ich tippe: Dim x = AsString(_fGlobalTbd.Disposition.InspTrans) um "InspTrans" x zuzuweisen, warum schreib ich nich Dim x = "InspTrans" ?

    Enums nimmste für Zahlen, die im Code benamt sein sollen.

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

    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.

    jan99 schrieb:

    Ich habe schon einmal davon gehört das man soetwas wie .tostring überschreiben kann.

    Du kannst Erweiterungsmethoden verwenden.

    VB.NET-Quellcode

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


    Aufrufbeispiel

    VB.NET-Quellcode

    1. MessageBox.Show(Disposition.geplant.GetEnumString & " " & Disposition.geplant.GetEnumInt)
    @jan99 Wozu brauchst Du denn den ühaupt?
    Bestenfalls als Index in einem IEnumerable-Zugriff.
    Nur um das anzusehen genügt doch der Quelltext.
    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!
    Hi !

    erst einmal allen vielen Dank für die Rückmeldung.

    RodFromGermany schrieb:

    @jan99 Wozu brauchst Du denn den ühaupt?


    Wir arbeiten in einem Gis mit sogenannten Werte-Tabellen und dort werden Eigenschaften über Werte ausgedrückt, die dann wiederum auch in SQL-Statements einfließen.

    Mein Kollege, der in den Zahlen "zuhause" ist, der setz immer irgendwelche Werte ein. Diesen kann man aber nicht ansehen was diese bedeuten. Aus dem Grunde habe ich die ENUM erstellt und so kann ich über eine sprechenden Namen Zahlenzuweisen. Das ist sicherer und damit weniger fehleranfällig.

    Ich werde mir das mit den Erweiterungsmethoden einmal ansehen und ggf. darauf zurück kommen.

    Gruß Jan