列表排序修改集合嗎?請問列表<T>排序修改集合嗎?
我認爲它必須爲我得到一個「System.InvalidOperationException:集合被修改;枚舉操作可能不會執行。」另一個線程中的異常。
在我的多線程應用程序中,我認爲所有線程只是讀取集合,但一個線程進行排序。
感謝
列表排序修改集合嗎?請問列表<T>排序修改集合嗎?
我認爲它必須爲我得到一個「System.InvalidOperationException:集合被修改;枚舉操作可能不會執行。」另一個線程中的異常。
在我的多線程應用程序中,我認爲所有線程只是讀取集合,但一個線程進行排序。
感謝
是,Sort
是原地的,如果這是你的意思,它肯定會作廢任何迭代器。
如果您想查看集合的排序「視圖」,可以使用LINQ的OrderBy
運算符,該運算符不會修改現有集合,但會返回包含原始集合中元素的序列,但在給定訂購。
因此,例如,而不是:
// I want to print out the list of names, sorted...
names.Sort();
foreach (string name in names)
{
Console.WriteLine(name);
}
你可以使用:
foreach (string name in names.OrderBy(x => x))
{
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();
排序集合不應該修改單個元素,但它會明顯修改* collection *。 – 2012-03-25 15:12:30
但它會導致修改的集合異常嗎? – CodingHero 2012-03-25 15:13:43
看看這個問題 - http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute – 2012-03-25 15:14:05