ich XML-Daten aus einer Datei in eine Liste von Objekten dieser Klasse analysieren:Lesen von XML richtig, wird aber um verwirrte später
public class VerificationSample
{
public double DesiredA { get; set; }
public double DesiredB { get; set; }
public double DesiredC { get; set; }
// ..
public void ReadXml(XmlReader reader)
{
reader.ReadToFollowing("VerificationSample");
this.DesiredA = (double)FileStructure.GetAttributeSafe(reader, "DesiredA", typeof(double));
this.DesiredB = (double)FileStructure.GetAttributeSafe(reader, "DesiredB", typeof(double));
this.DesiredC = (double)FileStructure.GetAttributeSafe(reader, "DesiredC", typeof(double));
this.ReferenceNumber = (int)FileStructure.GetAttributeSafe(reader, "ReferenceNumber", typeof(int));
// ..
}
}
ich diese Probe xml lesen:
<VerificationSamples Count="4">
<VerificationSample DesiredA="0.000" DesiredB="50.000" DesiredC="0.000" ReferenceNumber="0"/>
<VerificationSample DesiredA="75.000" DesiredB="-3.000" DesiredC="0.000" ReferenceNumber="0"/>
<VerificationSample DesiredA="-30.000" DesiredB="0.000" DesiredC="0.000" ReferenceNumber="1"/>
<VerificationSample DesiredA="-2.000" DesiredB="-60.000" DesiredC="0.200" ReferenceNumber="1"/>
</VerificationSamples>
Mit diesem routine:
public void LoadFromFile(string path)
{
XmlReader reader = XmlReader.Create(path);
// ..
reader.ReadToFollowing("VerificationSamples");
int count = (int)FileStructure.GetAttributeSafe(reader, "Count", typeof(int));
this.VerificationSamples.Clear();
for (int i = 0; i < count; i++)
{
VerificationSample newVerificationSample = new VerificationSample();
newVerificationSample.ReadXml(reader);
this.VerificationSamples.Add(newVerificationSample);
}
}
Alles ist gut so weit und funktioniert wie ein Charme. Später, wenn ich eine andere Funktion ausführe, wo ich versuche, auf meine VerificationSamples
Liste zuzugreifen, um einige Werte meiner Objekte zu verwenden, wird die Reihenfolge der Objekte durcheinander gebracht. So erste Zeile in der XML (war das erste Objekt), aber später ist es die 3. .. 2. ist der 1. .. 4. ist der 2. usw. (kein offensichtliches Muster). Kann sich jemand vorstellen warum ???
Es ist, weil es nur ist willkürlich die Objekte aus der Liste Grabbing - Sie müssen '.OrderBy (x => x.SomeValue)' verwenden, um sie in einer bestimmten Reihenfolge –
zurückzukehren @Geoff Es ist nie zufällig die XML-Zeilen gepackt . Es beginnt immer mit der ersten Zeile -> Objekt hinzufügen, zweite Zeile -> Objekt hinzufügen ... usw. Ich habe es viele Male beobachtet. Was würden Sie als Lösung für Ihr Argument vorschlagen, wenn dies der Fall ist? –
Sie haben Recht - es wird die XML-Zeilen der Reihe nach erfassen - aber wenn Sie die Liste erneut aus dem Speicher herausholen/greifen, muss die speicherinterne "Liste" ('VerificationSamples'?) Nach einem Wert sortiert werden; ansonsten erscheint die Reihenfolge "zufällig" –