List <T> Sort会修改集合吗?

Cod*_*ero 2 .net c#

列表排序修改集合?

我认为必须得到一个"System.InvalidOperationException:Collection被修改;枚举操作可能无法执行." 另一个线程上的异常.

在我的多线程应用程序中,我认为所有线程只是读取集合但是一个线程进行排序.

谢谢

Jon*_*eet 6

是的,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)

另一种选择是在你第一次填充列表时,在任何事情开始迭代之前对它进行排序 - 这是唯一需要的修改,以及排序顺序是否会改变(例如由于对列表中引用的对象的修改)那么只做一次就有意义了.