Enum - Funktionen für die Auswertung vereinfachen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Schmittmuthelm.

    Enum - Funktionen für die Auswertung vereinfachen

    Moin!

    ich muss noch eine Frage zum Thema ENUM loswerden. Habe zwar schon einige gefunden, aber irgendwie geht das nie in die Richtung die ich mir vorstelle. Vielleicht geht es auch gar nicht.

    Fasse zunächst die Postings der letzten Tage zusammen.

    Ich habe eine Vielzahl von ENUM-Definitionen die Daten aus Datenbankentabellen (Eigeschaften von Kanalelementen) repräsentieren.

    Beispiel:

    VB.NET-Quellcode

    1. Public Enum Fitting
    2. undefiniert = -1 ' von der Programmierung ergänzt
    3. EntwRinneZuAblauf = 9
    4. Gebäudeanschluss = 10
    5. Regenfallrohr = 11
    6. Roste_seitlich = 1006
    7. ReinigungsOeffnung = 1007 'Revisionsöffnung
    8. End Enum


    Nun möchte ich die Integerwerte in Listen, kommagetrennt, zusammenfassen. Wichtig ist, dass aber die Integer-Werte zusammengeführt werden.

    Hierzu habe ich mir folgende Funktion für die Fittings geschrieben

    VB.NET-Quellcode

    1. Public Function Join(ParamArray Liste() As Fitting) As String
    2. Dim Result As String = ""
    3. Dim Seperator As String = ""
    4. If Liste.Count = 0 Then Return Result
    5. For i As Integer = 0 To Liste.Count - 1
    6. Result &= Seperator & CInt(Liste(i)).ToString
    7. Seperator = ","
    8. Next
    9. Return Result
    10. End Function


    Wenn ich das nun für die Vielzahl von ENUMs mache, dann entsteht viel Code der schwer zu warten ist.

    Meine Idee geht dahin aus der Liste() of xxx eine Liste von Integer zu machen und diese dann eine JOIN-Funktion zu übergeben.

    Dann hätte ich für jedes ENUM eine Konvertierung und würde die JOIN-Funktion aufrufen - das wäre erheblich kürzer.

    Bin nur leider überhaupt nicht fündig geworden oder ich habe die Lösung nicht erkannt.

    Geht es einfacher und professioneller??

    Gruß Jan

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

    Mit

    jan99 schrieb:

    VB.NET-Quellcode

    1. For i As Integer = 0 To Liste.Count - 1
    2. Result = Seperator & CInt(Liste(i)).ToString
    3. Seperator = ","
    4. Next
    machst du dir bei jedem Durchlauf dein Result wieder mit einem neuen Wert platt.

    Aus der Hüfte geschossen in c#

    C#-Quellcode

    1. static string JoinEnumValues<T>()
    2. {
    3. if (!typeof(T).IsEnum)
    4. return $"{typeof(T)} is no enum";
    5. List<string> members = new List<string>();
    6. foreach (var item in Enum.GetValues(typeof(T)))
    7. {
    8. members.Add($"{item} ({(int)item})");
    9. }
    10. return string.Join(",", members);
    11. }


    So müsstest du dir nicht für jedes Enum eine separate Methode schreiben.
    Dumm ist der, der dumm ist. Nicht andersrum!

    jan99 schrieb:

    Nun möchte ich die Integerwerte in Listen, kommagetrennt, zusammenfassen. Wichtig ist, dass aber die Integer-Werte zusammengeführt werden.
    weiss nicht, was das bedeutet: "zusammenfassen, aber zusammengeführt".
    Kannst du mal Beispiele machen, was reingehen soll, und was bei rauskommen?
    @jan99 Meinst Du solch eine Konvertierung (LINQ):

    VB.NET-Quellcode

    1. Enum MyEnum
    2. a = 1
    3. b = 3
    4. c = 42
    5. End Enum
    6. Private Sub Test()
    7. Dim aa As MyEnum() = {MyEnum.a, MyEnum.b, MyEnum.c}
    8. Dim bb() As Integer = (From a In aa Select Convert.ToInt32(a)).ToArray
    9. End Sub
    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!
    Moin!

    danke erst einmal wieder für die Rückmeldungen.

    Wie Schmittmuthelm schon richtig angemerkt hat wurde Result immer wieder platt gemacht. Code berichtigt.

    Ich werden jetzt auch erst einmal seinen "Schuss aus der Hüfte" ausprobieren und mich dann wieder melden.

    Jan
    Moin!

    jetzt habe ich mir das einmal angesehen....

    Schmittmuthelm schrieb:



    C#-Quellcode

    1. static string JoinEnumValues<T>()
    2. {
    3. if (!typeof(T).IsEnum)
    4. return $"{typeof(T)} is no enum";
    5. List<string> members = new List<string>();
    6. foreach (var item in Enum.GetValues(typeof(T)))
    7. {
    8. members.Add($"{item} ({(int)item})");
    9. }
    10. return string.Join(",", members);
    11. }




    Da ist erst einmal der Punkt, wie ich diese Funktion aufrufe - keine Ahnung.

    Ich hatte mir soetwas wie

    VB.NET-Quellcode

    1. Public Function Join(ParamArray Liste() As Fitting) As String


    vorgestellt, da ich nicht das gesammte Enum kommagetrennt zusammenführen möchte.

    Vielmehr sieht das dann aus wie ...

    VB.NET-Quellcode

    1. Dim Bedingungen as String = EBL.Global.TBD.JoinEnumValues(EBL.Global.TBD.Fitting.Regenfallrohr, EBL.Global.TBD.Fitting.AbzweigerLinks)


    Das Ergebnis wäre dann

    11,104


    ????

    Gruß Jan
    @jan99 Ist das dann eher nach deinen Vorstellungen?

    C#-Quellcode

    1. static string JoinEnumValues<T>(params T[] values)
    2. {
    3. if (!typeof(T).IsEnum)
    4. return $"{typeof(T)} is no enum";
    5. return string.Join(",", values.Select(x => Convert.ToInt32(x)));
    6. }


    Aufruf:

    C#-Quellcode

    1. string joinedValues = JoinEnumValues(Fitting.Regenfallrohr, Fitting.AbzweigerLinks);
    Dumm ist der, der dumm ist. Nicht andersrum!

    Schmittmuthelm schrieb:

    C#-Quellcode

    1. if (!typeof(T).IsEnum)
    2. return $"{typeof(T)} is no enum";
    Da gehört eine Exception geworfen, denn ein falscher Aufruf ist einfach falsch programmiert.
    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!
    Moin!

    das ...
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    ist das was ich mir vorstellt hatte auch vom Ergebnis her.

    Danke für Euer aller Unterstützung.

    Gruß Jan

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