リストを並べ替えるコレクションの並べ替えを変更しますか?リストがありません<T>コレクションを変更しますか?
「System.InvalidOperationException:コレクションが変更されたため、列挙操作が実行されない可能性があります。他のスレッドでの例外。
私のマルチスレッドアプリケーションでは、すべてのスレッドはコレクションを読んでいると思っていましたが、1つのスレッドはソートを行います。
おかげ
リストを並べ替えるコレクションの並べ替えを変更しますか?リストがありません<T>コレクションを変更しますか?
「System.InvalidOperationException:コレクションが変更されたため、列挙操作が実行されない可能性があります。他のスレッドでの例外。
私のマルチスレッドアプリケーションでは、すべてのスレッドはコレクションを読んでいると思っていましたが、1つのスレッドはソートを行います。
おかげ
はい、それはあなたが何を意味するかだ場合Sort
は、インプレースであり、それは確かに任意のイテレータが無効になります。
コレクションのソートされた「ビュー」を表示する場合は、LINQのOrderBy
演算子を使用できます。これは、既存のコレクションを変更せず、元のコレクションの要素を含むシーケンスを返します注文。何がそれを反復処理を開始する前に、もう一つの選択肢は、あなたが最初にリストを作成する際に一度だけ、それを並べ替えることである
foreach (string name in names.OrderBy(x => x))
{
Console.WriteLine(name);
}
:あなたが使用することができ
// I want to print out the list of names, sorted...
names.Sort();
foreach (string name in names)
{
Console.WriteLine(name);
}
:代わりに例えばので
、 - の変更が必要です。ソート順が変更されない場合(リストに参照されているオブジェクトが変更されたなど)、一度やり直すだけです。
はい、List<T>.Sort
メソッドは実際にコレクションを適切に並べ替え、コレクションを変更します。新しいコレクションを取得したい場合は、元のコレクションを変更しないでソートしてから、OrderBy
拡張メソッドを使用してください。
List<int> theList = ...;
theList.Sort(); // In place mutating sort. Has a void return
List<int> sorted = theList
.OrderBy(Comparer<int>.Default)
.ToList();
コレクションをソートすると個々の要素は変更されませんが、*コレクション*は明らかに変更されます。 –
しかし、それは変更されたコレクション例外を引き起こしますか? – CodingHero
この質問を見る - http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute –