Laden...

Datei in class/struct einlesen, automatisch per Reflection anhand der Member

Erstellt von Ravyle vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.140 Views
R
Ravyle Themenstarter:in
18 Beiträge seit 2011
vor 12 Jahren
Datei in class/struct einlesen, automatisch per Reflection anhand der Member

Guten Abend,

Ich sitze hier wieder an einem kleinen Problem:

Ich habe mehrere Dateien, die ich einlesen will, die aber ein eigenes Format haben, sprich sie sind nicht static.
Daher habe ich mir immer verschiedene Klassen erstellt für jede datei, die dann eine public variable haben (für eine List später).

Ich möchte die Datei ungefähr so einlesen (folgendes ist einfach nur zum erklären, kein reeler code):

foreach(variable in class) {
    if(variable == typeof(int))
         binaryReader.ReadInt32();
}

undsoweiter.

Ich habe schon eine kleine Idee bekommen, wie ich das machen könnte, leider funktioniert das aber nicht so, wie ich es will.

Hier mein Testcode:

       void test()
        {
            classone j = new classone();
            FieldInfo[] _fi = typeof(classone).GetFields(BindingFlags.Instance | BindingFlags.Public);
            foreach (FieldInfo fi in _fi)
            {
                if (fi.FieldType == typeof(Int32))
                {
                     fi(.SetValue, was auch immer. :D) = binaryReader.ReadInt32();
                }
            }
        }

Leider macht er das nicht mit. Ich hatte in einem vorherigen Beispielcode am Ende des codes eine MessageBox gemacht, die hat er mir aber nie ausgegeben - Obwohl er es theoretisch müsste. Einen Fehler habe ich aber auch nie bekommen.

Habe ich dort irgendwie einen kleinen Denkfehler oder gibt es diese Möglichkeit überhaupt nicht?

Grüße,

Ravyle.

4.221 Beiträge seit 2005
vor 12 Jahren

Dein Denkfehler ist, dass Du denkst statt zu debuggen...

Bin sicher du findest den Grund wenn Du es debuggst .. (mir fallen einige Gründe ein)...

Aber das sind Grundlagen

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

C
2.121 Beiträge seit 2010
vor 12 Jahren

Ich würde niemals die Felder per Reflection auslesen und dann darauf vertrauen dass die in der Datei wirklich immer in genau dieser Reihenfolge stehen. Spätestens wenn du die Klasse mal umorganisierst, stimmt das nicht mehr.

Für deinen Fall würde ich structs verwenden, da gibts sicher genügend Beispiele wie man das machen kann.
Oder du liest die einzelnen Felder ausdrücklich aus, d.h. jedes Feld einzeln lesen und schreiben. Das macht zwar erst mal mehr Programmierarbeit, ist aber verständlicher als irgendein Mechanismus im Hintergrund und funktioniert evtl. trotzdem schneller als lange suchen wie und warum...

W
872 Beiträge seit 2005
vor 12 Jahren

Du serialisierst - entweder benutzt Du etwas aus dem Framework oder performanter Protobuffer.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo weismat,

so wie ich es lese, ist das Dateiformat vorgegeben und wenn das tatsächlich so ist, scheiden vermutlich die meisten oder alle Standardverfahren aus.

herbivore