2011-07-12 14 views
2

現在、いくつかのラベルを含むSharepoint 2010ウェブパーツがあります。これらのラベルの1つを除いて、すべてプログラムで削除したいと考えています。コントロールから1つを除くすべてのアイテムを削除する

私は以下のコードを試しましたが、明らかに、反復処理中にコレクションを変更できないため、System.InvalidOperationExceptionがあります。しかし、私はこれを他の方法で試してみることはできません。

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

答えて

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]); 
    } 
} 
+0

パーフェクトを、ありがとう – Landric

1

エラーが表示される理由は正しいですか。私はさらにこれをリファクタリングでしょう

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

:問題解決するためにLINQのとてToArray()を使用して、以下の

private void clearLabels() { 

    foreach (from cont in this.Controls 
      where cont is Label && cont.ID != "error" 
      ).ToArray() 
     this.Controls.Remove(cont); 
} 
関連する問題