Statische Werte einer Klasse als ListOf zurückgeben

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Statische Werte einer Klasse als ListOf zurückgeben

    Moin,

    ich habe einige Klassen, welche eine mehrere Public Const Felder enthalten.
    Nun möchte über eine eine Shared ReadOnly Property der Klasse eine Liste aller statischen Werte erhalten.
    Das Ganze funktioniert soweit auch ...

    VB.NET-Quellcode

    1. Public NotInheritable Class Kennwert
    2. Public Const Orange As Double = 0.39
    3. Public Const Gruen As Double = 0.59
    4. Public Const Gelb As Double = 0.8
    5. Public Const Violett As Double = 1.0
    6. Public Const Blau As Double = 1.19
    7. Public Const Rot As Double = 1.58
    8. Public Const Braun As Double = 1.97
    9. Public Const Grau As Double = 2.36
    10. Public Const Weiss As Double = 3.16
    11. Public Const Text As String = "Hier könnte ihre Werbung stehen."
    12. Private Sub New()
    13. End Sub
    14. ''' <summary>
    15. ''' Returns all static field values (Double) of this class.
    16. ''' </summary>
    17. ''' <returns></returns>
    18. Public Shared ReadOnly Property DoubleValues As IEnumerable(Of Double)
    19. Get
    20. Return From q In GetType(Kennwert).GetFields Where q.IsPublic And q.IsStatic And q.FieldType Is GetType(Double) Select CType(q.GetValue(New Kennwert()), Double)
    21. End Get
    22. End Property
    23. ''' <summary>
    24. ''' Returns all static field values (String) of this class.
    25. ''' </summary>
    26. ''' <returns></returns>
    27. Public Shared ReadOnly Property StringValues As IEnumerable(Of String)
    28. Get
    29. Return From q In GetType(Kennwert).GetFields Where q.IsPublic And q.IsStatic And q.FieldType Is GetType(String) Select CType(q.GetValue(New Kennwert()), String)
    30. End Get
    31. End Property
    32. End Class


    Die Properties geben die jeweiligen Werte entsprechend der Datentypen (Double, String) zurück.

    Nun möchte ich diese Properties auch in anderen Klassen verwenden, jedoch sollen dabei GetType(Kennwert) und New Kennwert() dynamisch aus der entsprechenden Klasse bezogen werden, damit ich diese nicht für jede Klasse in den Properties anpassen muss.

    Wie stelle ich dies am besten an?

    Grüße
    @BlueLagoonX Dann brauchst Du keine List(Of T), sondern ein - geben wir ihm den Arbeitstitel: Dictionary(Of Class, T).
    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!
    Bei Statischen Membern muss man kein Objekt übergeben:

    VB.NET-Quellcode

    1. ...
    2. Public Shared ReadOnly Property DoubleValues As IEnumerable(Of Double)
    3. Get
    4. Return From q In GetType(Kennwert).GetFields Where q.IsPublic And q.IsStatic And q.FieldType Is GetType(Double) Select CType(q.GetValue(Nothing), Double)
    5. End Get
    6. End Property
    achso - und immer AndAlso nehmen - And ist für boolean Vergleiche outdated