Variablen einer Klasse dynamisch füllen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Variablen einer Klasse dynamisch füllen

    Moin,

    folgendes Problem:

    Ich habe ein eigenes Configsystem für meine Programme. Bislang habe ich diese recht strikt ausgelesen.
    Jetzt mache ich das ganze dynamisch, sodass ich nur eine Funktion zum auslesen der Configs benötige.

    Problemstellung:

    Ich habe als Beispiel folgende Klasse:

    VB.NET-Quellcode

    1. Public Class CfgVars
    2. Public HOST As String = ""
    3. Public DATABASE As String = ""
    4. Public DBUSER As String = ""
    5. Public DBPW As String = ""
    6. End Class


    Jetzt möchte ich diese Variablen automatisch füllen.

    Im Config File steht dann sowas:
    'DB Settings HOST=SERVER; DATABASE=db; DBUSER=ST_DBusr; DBPW=pw;
    Alle Variablen aus der Config Datei auslesen ist ja kein Ding. Ich möchte jetzt allerdings nicht mit IF alle Abfragen und fix im Code schreiben:

    VB.NET-Quellcode

    1. If .... then
    2. DATABASE=configline.split("=")(1).trim.trimend(";")
    3. end if


    Was ich weiß: Die Variablen aus der Klasse auslesen geht ja so:

    VB.NET-Quellcode

    1. Dim aType As Type = GetType(CfgVars)
    2. For Each fi As System.Reflection.FieldInfo In aType.GetFields()
    3. listVar.Add(fi.Name)
    4. Next


    Aber wie Fülle ich die Variablen, wenn ich eine neue Klasse initiere automatisch?
    Ich suche quasi nach einer programmierbaren Lösung hierfür:

    VB.NET-Quellcode

    1. dim cConfig as new CfgVars
    2. lvars = GetVars(arrVar, f_Config)
    3. For Each vr("die ich ausgelesen habe") As Var In lvars
    4. For Each classVar ("Variable in der Klasse") in cConfig.Vars
    5. If classVar.Name = vr.Name then
    6. classVar.Value = vr.Value
    7. End If
    8. Next
    9. Next


    Jemand eine Idee wie sowas smart geht?
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    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!
    guggemol ComplexConverter: alles in einen String und zurück
    tickt aber bisserl anners.
    Da gibts keine Config-Klasse, sondern es braucht eine Methode, die alles bezeichnet, was gespeichert werden soll.
    Mehr brauchts nicht - keine Methode, um die Config-Klasse zu befüllen, und keine Methode, um die befüllte Config-Klasse dann anzuwenden.
    Sondern die Anwendung erfolgt direkt in der Methode, die bezeichnet, was anzuwenden ist, gewissermassen.
    @razzzer530i DFas eine ist das Yielding als solches, also eine IEnumerable Prozedur, die jeden Wert mit Yield zurückgibt.
    Das sorgt dafür, dass beim 1. Aufruf der 1. Wert zurückgegeben wird, beim 2. der 2. usw.
    Du musst nur eine Reihenfolge implementieren, in der Deine Werte zurückgegeben werden, z.B. packst Du sie in eine List(Of 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!