В настоящее время у меня есть веб-часть Sharepoint 2010
, которая включает несколько ярлыков. Я хочу программно удалить все, кроме одного из этих меток.
Я попробовал код ниже, но получил System.InvalidOperationException
, потому что, очевидно, нельзя изменять коллекцию при повторении через нее. Тем не менее, я не знаю, как еще попробовать это.
private void clearLabels()
{
foreach (Control cont in this.Controls)
if (cont is Label && cont.ID != "error")
this.Controls.Remove(cont);
}
Итерации над ним назад.
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]);
}
}
Вы правильно знаете, почему вы получаете ошибку. Следующее использование 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);
}