Autor Beitrag
FinalFantasy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 127

Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
BeitragVerfasst: Mo 14.11.05 12:18 
Hi,

ich hab hier eine ArrayList und möchte die Inhalte der Liste binär mit BinaryWriter in eine Datei schreiben.
bw.Write() geht aber nicht mit Objekten sondern nur mit "echten" Typen.
In meiner ArrayList stehen aber unterschiedliche (primitive) Typen wie int, short, byte, bool, string....
Mittels o.GetType() kann ich den Typen ja ermitteln, aber wie kann ich das Object in diesen Typen konvertieren?
Einzige Möglichkeit die mir bis jetzt eingefallen ist, wäre
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
foreach(object o in array) {
  switch(o.GetType()) {
    case 'int': bw.Write((int) o);
    case 'short': bw.Write((short) o);
    ....
  }
}


Das Beispiel ist nur sinngemäß, wird also so nicht genau funktionieren.
Diese Lösung ist aber ziemlich unflexibel und würde halt auch nur mit den Typen funktionieren, die man im Switch hat.
Es muss doch noch bessere Lösungen geben!!

Nein, ich habe nur .NET 1.1 und kann von daher auch keine Generics benutzen, und nein, ich kriege auch kein .NET 2.0.
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mo 14.11.05 15:59 
user profile iconFinalFantasy hat folgendes geschrieben:
Es muss doch noch bessere Lösungen geben!!
Jupp, den BinaryFormatter:
  • Schreiben:
    ausblenden Pascal
    1:
    2:
    var formatter := new BinaryFormatter();
    formatter.Serialize(stream, list);

    ausblenden C#-Quelltext
    1:
    2:
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, list);

  • Lesen:
    ausblenden Pascal
    1:
    2:
    var formatter := new BinaryFormatter();
    list := formatter.Deserialize(stream) as ArrayList;

    ausblenden C#-Quelltext
    1:
    2:
    BinaryFormatter formatter = new BinaryFormatter();
    list = formatter.Deserialize(stream) as ArrayList;

Zitat:
Nein, ich habe nur .NET 1.1 und kann von daher auch keine Generics benutzen, und nein, ich kriege auch kein .NET 2.0.
Frage mal deinen Chef, was wohl günstiger ist: Die paar Öken für ein Pro update zu zahlen, oder die zig Stunden, die drauf gehen weil du um 5 Ecken denken und Code schreiben must, der mit 2.0 schlichtweg nicht mehr nötig ist. (Bzw. du musst nun mit ArrayListen rumfriemeln...)
Sorry, kann ich absolut nicht nachvollziehen... :gruebel:
Aber gilt das nicht für das Management in größeren Firmen im Allgemeinen? ;)
FinalFantasy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 127

Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
BeitragVerfasst: Mo 14.11.05 16:55 
Ahh, danke, das sieht ja schonmal ganz interessant aus. Das werd ich mir mal anschauen.

OT:
Das Problem (bei grösseren Firmen zumindest) ist, dass für denjenigen der entscheidet, ob ich .NET 1.1, .NET 2.0 oder Cobol mache, zwischen Windows und Linux genausowenig unterschied ist, wie zwischen C, C++ und C#.... Auf deutsch: Es interessiert ihn nicht.
Musste schon darum kämpfen, über haupt von Delphi 5 (!!!) auf C#.NET wechseln zu dürfen. Visual Studio 2005 kostet ja schliesslich was, wohingegen Delphi 5 schon da ist, ausserdem muss ja dann noch bei allen Anwendern das .NET Framework installiert werden, was wieder ein Aufwand ist.... *chrm*