@Turtle_Onni

Как добавить элемент в массив когда цикл с этим массивом запущен?

Всем привет!

Необходимо добавить массив в массив с которым запущен цикл.
Мои варианты которые почему то не работают:

List<BlueprintLink> blueprintLinks = new List<BlueprintLink>();
                    BlueprintLink parentBlueprintLink = db.BlueprintLinks.FirstOrDefault(m=>m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id);
            blueprintLinks.Add(parentBlueprintLink);
            foreach (var blLink in blueprintLinks.ToArray())
            {
                List<BlueprintLink> _blueprintLinks = db.BlueprintLinks.Where(m=>m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId).ToList();
                blueprintLinks.AddRange(_blueprintLinks);
            }


Вариант с for тоже не работает. Добавляется один элемент и выходит.
Заранее большое спасибо!
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 3
WNeZRoS
@WNeZRoS
Ваш код:
List<BlueprintLink> blueprintLinks = new List<BlueprintLink>();
BlueprintLink parentBlueprintLink = db.BlueprintLinks.FirstOrDefault(m=>m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id);
blueprintLinks.Add(parentBlueprintLink);
foreach (var blLink in blueprintLinks.ToArray()) // .ToArray() создаёт копию blueprintLinks, в котором будет один добавленный элемент на предыдущей строчке
{
    List<BlueprintLink> _blueprintLinks = db.BlueprintLinks.Where(m=>m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId).ToList();
    blueprintLinks.AddRange(_blueprintLinks); // добавляем новые элементы в оригинальный список
} // выходим из цикла потому что в копии сделанной ToArray всего один элемент


Правильный вариант:
var blueprintLinks = new List<BlueprintLink>();
blueprintLinks.Add(db.BlueprintLinks.First(m => m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id));
for(int i = 0; i < blueprintLinks.Count; i++) // Идём по оригинальному списку от 0 до конца
{
    blueprintLinks.AddRange(db.BlueprintLinks.Where(m => m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId)); // добавляем новые элементы в список
} // blueprintLinks.Count увеличился на кол-во добавленных элементов и есть куда идти дальше
Ответ написан
Комментировать
@John_Nash
coder
Что не так-то?

Результат в blueprintLinks
Ответ написан
@Smilleey
Создайте временный массив, в цикле добавляйте элементы туда, после цикла добавьте временный массив в начальный.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы