@lucky_e3

Как удалить определенный Image с Canvas?

Требуется пройтись по всем Image и удалить Image, удовлетворяющий условию.
Использую данный код:
foreach (Image img in CnMapField.Children)
            {
                        if (img.Margin.Left == x)
                            CnMapField.Children.Remove(img);
            }


Выдает ошибку:
e374e11ef1274946a37ab20b6a7b9be9.PNG
  • Вопрос задан
  • 486 просмотров
Решения вопроса 1
Casper-SC
@Casper-SC
Программист (.NET)
Ну вот, к примеру:
private void DoWork()
{
    Canvas CnMapField = new Canvas();

    Image[] images = CopyFrom<Image>(CnMapField.Children);
    foreach (Image img in images)
    {
        if (img.Margin.Left == x)
            CnMapField.Children.Remove(img);
    }
}

private T[] CopyFrom<T>(UIElementCollection collection) where T : UIElement
{
    var images = new List<T>(collection.Count);
    images.AddRange(collection.Cast<T>());
    return images.ToArray();
}


То есть ты foreach(ем) бегаешь по копии коллекции, а удаляешь из оригинала.

Хотя в данном случае приведение к Image не обязательно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Вы изменяете коллекцию, по которой итерируетесь - так делать нельзя. Можете воспользоваться методом RemoveAll:
CnMapField.Children.RemoveAll(img => img.Margin.Left == x);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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