2009-03-23 9 views
0

J'ai regardé en ligne pour quelques références mais n'ai pas eu trop de chance. J'espère que c'est juste une chose simple que je néglige, mais dans mon code, je parcours la liste des participants et stocke les résultats demandés dans le tableau. Comme vous pouvez le constater, mon instruction foreach ajoutera simplement le dernier élément du tableau puisque le premier est remplacé.Perserving Array de AnonymousType

Comment puis-je simplement ajouter la valeur à l'index de tableau suivant. Donc, s'il y a [2] dans le tableau, comment puis-je m'assurer que this.physEntityPhysicalLeftEntityIDs contient [2] au lieu de toujours [1]? Si je dois clarifier, faites le moi savoir.

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

Quel est le type de physEntityPhysicalLeftEntityIDs – JaredPar

+0

Est-ce que votre question "Comment remplir un tableau avec des instances d'un type anonyme?" Je ne suis pas sûr de la question, exactement. – Eddie

+0

@JaredPar le type pour physEntityPhysicalLeftEntityIDs est String [], j'aurais dû l'inclure, désolé. – nightdev

Répondre

1

Si physEntityPhysicalLeftEntityIDs est un tableau, vous aurez besoin d'initialiser une variable d'index et incrémenter chaque fois à travers la boucle foreach:

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

Cela suppose que vous avez alloué assez d'espace dans le tableau. S'il y a plus d'éléments que ne le fera le tableau, vous obtiendrez un index hors limites.

Pour vous assurer qu'il ya assez d'espace dans le tableau, vous pouvez l'affecter avant la boucle au-dessus:

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

Remplacer int dans cette ligne avec le type approprié (vous ne dites pas de quel type est stocké dans le tableau).

+0

Bon conseil! Le type est String [] ... Je pense que vous vouliez dire new int [l_entityIDs.Count()]; – nightdev

+0

Oui, vous avez raison. Réparera. –

1

Eh bien, si vous voulez le traiter comme un tableau/liste, tout ce que vous avez à faire est

l_enityIDs.ToList()

puis .Add (nouveau {o_entityIDs = foo}

Si vous souhaitez l'ajouter à IEnumerable, cela nécessite une méthode d'extension qui renvoie tout dans la source enumberable, et une instruction yield qui ajoute à votre prochaine valeur.