Properties von Objekten



  • Hi Forum !
    Ich habe da mal folgende Frage bzw folgenden Sachverhalt: Ich will eigentlich nur Daten aus einem Objekt mit einem update query in eine Datenbank verfrachten.
    Die Klasse des Objektes hat jetzt irgendwas um die 20 einzelne Properties. Kann ich jetzt nicht irgendwie via einer For each Schleife die einzelnen Properties abklappern ? Sinn der ganzen Sache ist, ich möchte vorher überprüfen ob ein Property eine Null Reference hält, hab jetzt aber keine Lust zu schreiben:

    If (Obj.Prob1 == Null){}
    If (Obj.Prob2 == Null){}
    If (Obj.Prob3 == Null){}
    ...
    If (Obj.Prob20 == Null){}
    

    Und mein Ziel wäre jetzt sowas wie

    For Each Property in Obj
    {
        If (Property == NUll){}
    }
    


  • Nein geht nicht. Aber wenn Du das Objekt selbst geschrieben hast, dann ersetze die Properties durch eine Set Funktion, dort kannste alles per Parameter übergeben oder Du übergibt einer Funktion ein struct oder dergleichen.



  • Das ist das Problem: Es ist leider nicht meine Klasse, die fliegt in einer DLL rum, die ich über einen Dritt-Anbieter habe.
    ich habe aber gerade nochmal eine Google-Attacke gestartet und war gar erfolgreich, glaube ich zumindest, dass sich das mit meinem Fund realiseren lässt 🙂 Und zwar heißt das vermutliche Zauberwort Reflections.

    Hier mal die Seite, wer Interesse hat:

    http://www.aspheute.com/artikel/20040624.htm



  • Reasar = Homey

    Sorry, das kommt davon,wenn man in mehreren Foren gleichzeitig unterwegs ist 😉



  • SeboStone schrieb:

    Nein geht nicht. Aber wenn Du das Objekt selbst geschrieben hast, dann ersetze die Properties durch eine Set Funktion, dort kannste alles per Parameter übergeben oder Du übergibt einer Funktion ein struct oder dergleichen.

    und ob das geht 😉 Mal ein kleines Beispiel.

    TestKlasse:

    public class Test
    {
        private int field1;
        private int field2;
    
        public Test()
        {
            this.field1 = 0;
            this.field2 = 0;
        }
    
        public int Field1
        {
            get
            {
                return this.field1;
            }
            set
            {
                this.field1 = value;
            }
        }
    
        public int Field2
        {
            get
            {
                return this.field2;
            }
            set
            {
                this.field2 = value;
            }
        }
    }
    

    Aufruf:

    private void DoKatzenklo()
    {
        Test t = new Test();
    
        Type type = t.GetType();
        PropertyInfo[] properties = type.GetProperties();
        ArrayList list = new ArrayList();
        foreach ( PropertyInfo property in properties )
        {
            list.Add( property.GetValue(t, null) );
        }
    }
    

    Und zack hast du alle Werte innerhalb einer ArrayList. Also Homey ist mit Reflection auf dem richtigen Weg..

    mfg
    Hellsgore



  • OK, wieder was gelernt, Danke!


Log in to reply