2016-04-04 13 views
0

ここでは、リストの.removeと.removeAll拡張子の使用方法の例をいくつか検索しました。この作業をしようとすると、.removeAllを実際にリストから削除するのが難しいようです。それがしているのは、リストにあるすべての値のコピーを1つずつ保持することです。c#アイテムを繰り返し削除してリストに直接追加しますか?

ループは、 'k'で記述された値のセットを反復しています。私が望むのは、 'k'の値がリスト上にある場合、それをリストから完全に削除したいのです。 'k'の値がリストにない場合、追加したいと思います。

   for(double k=Low[0]; k<=High[0]; k +=TickSize) 
       { 
        if(LiTZ.Contains(k)) { //if k is in list 
         LiRemovalList.Add(k); //List of items to remove later 
        } 
        else { 
         LiTZ.Add(k); //if k not in list, add it 
        } 
       } 
       //Code to compare and remove items in LiRemovalList from LiTZ 

:私も、その後比較して何とかそのような最初のリストから項目を削除する、別のリストを作成し、文「もし」最初にそのリストに追加することについて考えている

  for(double k=Low[0]; k<=High[0]; k +=TickSize) 
      { 
       if(LiTZ.Contains(k)) { //if k is in list 
        LiTZ.RemoveAll(item => item == k); //remove it 
       } 
       else { 
        LiTZ.Add(k); //if k not in list, add it 
       } 
      } 

他のリストを作成しなくても、私が試している方法でListに直接反復することは可能ですか?

答えて

0

そうではありません。 foreachループまたはascendent forループを使用してコレクションを反復しながらコレクションを変更することはできません。アイテムを削除した後に列挙操作が失敗するためです。

あなたはそうのようなforループを逆方向に使用してアイテムを削除することができます。

for (int i = LiTZ.Count - 1; i >= 0; i--) { 
    if (LiTZ[i] == something) { 
    LiTZ.RemoveAt(i); 
    } 
} 

しかし、おそらくあなたのためにここに最良の選択は、新しいリストを作成することによってでしょう。