2009-03-23 12 views
0

Ich suchte online nach einigen Referenzen, hatte aber nicht viel Glück. Hoffentlich ist es nur eine einfache Sache, die ich übersehen habe, aber in meinem Code durchlaufe ich die Teilnehmerliste und speichere die abgefragten Ergebnisse in das Array. Wie Sie sehen können, fügt meine foreach-Anweisung nur das letzte Element des Arrays hinzu, da das erste ersetzt wurde.Perserving Array von AnonymousType

Wie kann ich einfach den Wert zum nächsten Array-Index hinzufügen. Also, wenn es [2] im Array gibt, wie kann ich sicherstellen, dass this.physEntityPhysicalLeftEntityIDs [2] statt nur immer [1] enthält? Wenn ich etwas klären muss, lass es mich wissen.

if (leftParticipants.Length >= 0) // Check to see if LeftParticipants exists 
{ 
    for (int c = 0; c < leftParticipants.Length; c++) 
    { 
     var l_entityIDs = 
      from BioList in o_data.Descendants(bp + "physicalEntityParticipant") 
      where BioList.Attribute(rdf + "ID").Value == leftParticipants[c].TrimStart('#') 
      select new 
      { 
       o_entityIDs = BioList.Elements(bp + "PHYSICAL-ENTITY") 
       .Select(entityID => entityID.Attribute(rdf + "resource").Value).ToArray() 
      }; 

     foreach (var entity in l_entityIDs) 
     { 
      this.physEntityPhysicalLeftEntityIDs = entity.o_entityIDs; // Set SmallMolecules from Left 
     } 
    } 
} 
+0

Was ist der Typ von physEntityPhysicalLeftEntityIDs – JaredPar

+0

Ist Ihre Frage "Wie fülle ich ein Array mit Instanzen eines anonymen Typs?" Ich bin mir nicht sicher, was genau die Frage ist. – Eddie

+0

@JaredPar der Typ für physEntityPhysicalLeftEntityIDs ist String [], ich hätte das mitenthalten sollen, sorry. – nightdev

Antwort

1

Wenn physEntityPhysicalLeftEntityIDs ein Array ist, müssen Sie eine Indexvariable initialisieren und es jedes Mal durch die foreach Schleife erhöhen:

int destIndex = 0;  
foreach (var entity in l_entityIDs) 
{ 
    this.physEntityPhysicalLeftEntityIDs[destIndex] = entity.o_entityIDs; // Set SmallMolecules from Left 
    ++destIndex; 
} 

Das setzt voraus, dass Sie genügend Platz in dem Array zugeordnet haben. Wenn mehr Elemente vorhanden sind, als in das Array passen, erhalten Sie einen Index außerhalb des zulässigen Bereichs.

Um sicherzustellen, dass in der Anordnung genügend Platz da ist, können Sie es vor der Schleife oben zuteilen:

this.physEntityPhysicalLeftEntityIds = new int[l_entityIDs.Count()]; 

ersetzen int in dieser Zeile mit dem richtigen Typ (Sie nicht sagen, welche Art gespeichert wird im Array).

+0

Guter Tipp! Der Typ ist String [] ... Ich glaube, du meinst new int [l_entityIDs.Count()]; – nightdev

+0

Ja, du hast Recht. Wird reparieren. –

1

Nun, wenn Sie es wie ein Array/Liste behandeln wollen, alles, was Sie tun müssen, ist

l_enityIDs.ToList()

und dann .Add (neu {o_entityIDs = foo})

Wenn Sie es zum IEnumerable hinzufügen möchten, erfordert dies eine Erweiterungsmethode, die alles in der Quellaufzählung zurückgibt, und eine Yield-Anweisung, die Ihren nächsten Wert hinzufügt.

Verwandte Themen