Удаление всех элементов, кроме одного, из элементов управления [дубликаты]

2

В настоящее время у меня есть веб-часть Sharepoint 2010, которая включает несколько ярлыков. Я хочу программно удалить все, кроме одного из этих меток.

Я попробовал код ниже, но получил System.InvalidOperationException, потому что, очевидно, нельзя изменять коллекцию при повторении через нее. Тем не менее, я не знаю, как еще попробовать это.

    private void clearLabels()
    {
        foreach (Control cont in this.Controls)
            if (cont is Label && cont.ID != "error")
                this.Controls.Remove(cont);
    }
Теги:
controls
sharepoint-2010

2 ответа

5
Лучший ответ

Итерации над ним назад.

for(int i = this.Controls.Count - 1; i >= 0; i--)
{
    if (this.Controls[i] is Label && this.Controls[i].ID != "error")
    {
        this.Controls.Remove(this.Controls[i]);
    }
}
1

Вы правильно знаете, почему вы получаете ошибку. Следующее использование Linq и ToArray() для решения проблемы:

private void clearLabels()
    {
        foreach (from cont in this.Controls).ToArray()
            if (cont is Label && cont.ID != "error")
                this.Controls.Remove(cont);
    }

Я бы реорганизовал это еще дальше:

private void clearLabels() {

    foreach (from cont in this.Controls 
             where cont is Label && cont.ID != "error"
            ).ToArray()
        this.Controls.Remove(cont);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню