Object[] wieder auslesen
-
Hallo, habe mal folgende Frage zu diesem Code:
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace testqueue { class Program { public class StructX { public bool bData { get; set; } public string strData { get; set; } } static void Main(string[] args) { StructX aaa = new StructX(); StructX bbb = new StructX(); StructX ccc = new StructX(); aaa.bData = true; aaa.strData = "a"; bbb.bData = false; bbb.strData = "b"; ccc.bData = true; ccc.strData = "c"; Queue Q = new Queue(); Q.Enqueue(aaa); Q.Enqueue(bbb); Q.Enqueue(ccc); Object[] Obj = Q.ToArray(); } } }
Wie kann ich denn jetzt wieder die einzelnen Elemente/Werte auslesen aus dem Obj (letzte Zeile)?
-
Garnicht. Weil du ein Object Array hast, gehen die Informationen "verloren". Nur durch ein Downcast könntest du darauf zugreifen. Benutz doch stattdessen ein Queue<StructX>.
-
FreakY<3Cpp schrieb:
Garnicht. Weil du ein Object Array hast, gehen die Informationen "verloren". Nur durch ein Downcast könntest du darauf zugreifen. Benutz doch stattdessen ein Queue<StructX>.
Ich habe keine Ahnung wie das mit Queue<StructX> funktioniert... Hat das was mit Templates zu tun? Wo schreibe ich das hin?
-
Im Debugmodus steht das so im Obj:
- Obj {object[3]} object[]
- [0] {testqueue.Program.StructX} object {testqueue.Program.StructX}
-> bData true bool
-> strData "a" string- [1] {testqueue.Program.StructX} object {testqueue.Program.StructX}
-> bData false bool
-> strData "b" string- [2] {testqueue.Program.StructX} object {testqueue.Program.StructX}
-> bData true bool
-> strData "c" string
-
Du kannst die Object-Referenzen auch wieder zurückcasten:
StructX s = (StructX) Obj[0];
So hat man das vor Generics gemacht. Mit Generics etwa so:
Queue<StructX> q = new Queue<StructX>(); StructX a = ... q.Enqueue(a); StructX[] array = q.ToArray();
Die nicht-generische Queue ist System.Collections.Queue, die generische ist System.Collections.Generic.Queue.
BTW deine Schreibweise -- alles mit Großbuchstaben -- ist etwas ungewöhnlich. Außerdem finde ich es etwas verwirrend, dass deine Klasse StructX heißt, obwohl sie keine struct ist.
-
Ok, danke!