Сохраняющий массив из AnonymousType - PullRequest
0 голосов
/ 23 марта 2009

Я искал в Интернете некоторые ссылки, но мне не повезло. Надеюсь, я просто упускаю из виду простую вещь, но в своем коде я перебираю список участников и сохраняю запрошенные результаты в массив. Как вы можете сказать, мой оператор foreach просто добавит последний элемент массива после замены первого.

Как я могу просто добавить значение в следующий индекс массива. Итак, если в массиве есть [2], как я могу убедиться, что this.physEntityPhysicalLeftEntityIDs содержит [2], а не только всегда [1]? Если мне нужно уточнить, дайте мне знать.

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
       }
    }
}

Ответы [ 2 ]

1 голос
/ 23 марта 2009

Если physEntityPhysicalLeftEntityIDs - массив, вам нужно инициализировать индексную переменную и увеличивать ее каждый раз в цикле foreach:

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

Это предполагает, что вы выделили достаточно места в массиве. Если в массиве больше элементов, чем уместится, вы получите ошибку индексации за границами.

Чтобы убедиться, что в массиве достаточно места, вы можете выделить его до цикла выше:

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

Замените int в этой строке на соответствующий тип (вы не сказали, какой тип хранится в массиве).

1 голос
/ 23 марта 2009

Ну, если вы хотите обращаться с ним как с массивом / списком, все, что вам нужно сделать, это

l_enityIDs.ToList ()

и затем .Add (new {o_entityIDs = foo})

Если вы хотите добавить его в IEnumerable, для этого требуется метод расширения, который возвращает все в перечисляемом источнике, и оператор yield, добавляющий следующее значение.

...