2016-06-22 4 views
1

リストから要素を削除する必要があります。<> C#。前回の回答から、これを達成するためにコレクションを逆戻りしてループしなければならないようです。しかし、私はリストの要素を反復処理するIEnumeratorを持っています。次のように コードは次のとおりです。C#のIEnumeratorを使用してコレクションから要素を削除します。

 IEnumerator<Solution> iterator = solutionsList_.GetEnumerator(); 
     while (iterator.MoveNext()) 
     { 

      Solution element = iterator.Current; 
      int flag = dominance_.Compare(solution, element); 
      if (flag == -1) { // The Individual to insert dominates other 
       // individuals in the archive 
       iterator.Remove();} // Delete it from the archive 

私は列挙子を使用して一緒に>リスト<から要素を削除するいくつかの方法を得ることができればそれは非常に参考になります。

+0

'solutionsList_'は' Solution' –

+0

はいsolutionsList_のリストは、タイプ一覧のですされて何 – Saniya

答えて

2

IEnumerableの列挙は可能ですが、そこからアイテムを追加/削除することはできません。

ICollectionを使用してアイテムを追加/削除することができます。リストがICollectionを実装するときにIEnumerableをICollectionにキャストしようとすることができます。

http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx

3

あなたはList<T>を持っているので、その後、明示的に列挙子をつかむために理由はありません。あなたは普通のループを使用して、後方に行くことができます - あなたはどんな問題なく要素を削除することができます、ここでのコードサンプルです:

var solutionsList_ = new List<int>(); 
for (var i = solutionsList_.Count - 1; i >= 0; i--) 
{ 
    var element = solutionsList_[i]; 
    //if (Some logic) 
    { 
     solutionsList_.RemoveAt(i); 
    } 
} 
0

私はあなたがシナリオを複雑にしていると思います。 Listにを直接適用することができます。だから、あなたは、単にリストから項目を削除するには、次のコードを使用することができます。

List<Solution> solutionsList_ = new List<Solution>() { }; 
// Populate the list here 
var itemsToRemove = solutionsList_.Where(x => dominance_.Compare(solution, x) == -1); 
foreach (var item in itemsToRemove) 
{ 
    solutionsList_.Remove(item); 
} 
関連する問題