2011-12-19 9 views

答えて

1

ランタイム例外がスローされます。

List<string> l = new List<string>(); 
l.Add("a"); 
l.Add("b"); 
l.Add("c"); 
l = l.Where(s => s.CompareTo("b") > 0).ToList(); 

lのようなものは端部のみでcが含まれています。また

Jonはリストにもあなたが

l.RemoveAll(s => s.CompareTo("b") <= 0);

を使用することができRemoveAll方法は上記と同じことをしますが、ロジックが反転しているが技術的にあなたがLINQ

+0

これは簡単なことですが、非常に無駄な解決策です。 – Jon

1
を使用していない気付いてい言及したように

通常、foreachループ内のコレクションには削除や追加を行うことはできません。探している結果を返すようにwhere句を設定するだけです。

List<string> l = new List<string>(); 
l.Add("a"); 
l.Add("b"); 
l.Add("c"); 

// notice that the where clause is opposite of what you had before 
l = list.Where(s=> s.CompareTo("a") <= 0).ToList(); 
+1

これは...少なくとも、それがコンパイルされるようにあなたはあなたの例を修正する必要 –

+0

うんを.ToListを()が必要になります私が必要としたもの。型がIListでない場合の任意の提案しかしIEnumerable ? –

+1

アイデアを表示するだけでいくつかのサンプルコード、私は知っている... ...最後に、これはある –

4

コレクションのアイテムを列挙している間は、コレクションからアイテムを削除することはできません。この場合

、私はList<T>.RemoveAllを使用したい:

l.RemoveAll(s => s.CompareTo("a")>0); 
+0

感謝を – user1105127

+0

@ user1105127 'IEnumerable 'は編集できないため、**要素は削除されません。代わりに、 'Enumerable.Whereを()'使用して、新しい変数に代入することにより、フィルタ*コレクション(または 'IEnumerableを'に再割り当て) –

2

あなたはそれがいくつかの条件により削除するには何を意味するのか、それはいくつかの条件でフィルタする意味を考える必要があり、そして。 (ヒント:論理的には反対です)あなたのしていることは、はるかに複雑な形で述べています。

var result = l.Where(s => ! (s.CompareTo("a")>0)); 
+0

おかげで、私の場合、私は必要があると思い*と思います新しい結果を得るのではなく、インプレース除去を実行します。 – user1105127

関連する問題