列表排序修改集合?
我认为必须得到一个"System.InvalidOperationException:Collection被修改;枚举操作可能无法执行." 另一个线程上的异常.
在我的多线程应用程序中,我认为所有线程只是读取集合但是一个线程进行排序.
谢谢
是的,Sort就位,如果这是你的意思,它肯定会使任何迭代器无效.
如果要查看集合的已排序"视图",可以使用LINQ的OrderBy运算符,该运算符不会修改现有集合,但会返回一个序列,其中包含原始集合中的元素,但是按给定顺序.
例如,而不是:
// I want to print out the list of names, sorted...
names.Sort();
foreach (string name in names)
{
Console.WriteLine(name);
}
Run Code Online (Sandbox Code Playgroud)
你可以使用:
foreach (string name in names.OrderBy(x => x))
{
Console.WriteLine(name);
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是在你第一次填充列表时,在任何事情开始迭代之前对它进行排序 - 这是唯一需要的修改,以及排序顺序是否会改变(例如由于对列表中引用的对象的修改)那么只做一次就有意义了.
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |