从控件中删除除一个项目外的所有项

时间:2011-07-12 13:02:19

标签: c# sharepoint-2010 controls

我目前有一个Sharepoint 2010网页部分,其中包含多个标签。我想以编程方式删除其中一个标签。

我尝试了下面的代码,但得到了System.InvalidOperationException,因为显然在迭代它时无法修改集合。但是,我不知道如何尝试这个。

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

2 个答案:

答案 0 :(得分: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 :(得分: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);
}