【发布时间】:2020-01-26 14:17:26
【问题描述】:
考虑 int 的简单列表:
var ints = new List<int>
{
1, 2, 3
};
如果我循环通过它,它是否总是以相同的顺序(1、2、3)排序? 即使我将它作为参数传递给函数,或者如果我将它作为一个列表传递给一个线程来处理?
数组有什么不同吗? IEnumerable 呢?
如果我例如:
ints.RemoveAt(1);
ints.Add(4);
会一直是1,3,4吗?
如果我编辑了一个元素呢?这些只是整数,但如果它们是复杂的对象,例如人,我抓住了人Bob(可以在任何索引处)并添加了他的整个传记。
会改变列表的顺序吗?
我可以使用OrderBy,但我只是想知道列表的顺序是否相同。
【问题讨论】:
-
是的。任何对象在 c# 中都是一样的,除非值改变。
-
您查看文档了吗?数组保证顺序,因为它们是数组——一个连续的内存块。列表也保证了这一点,并且在内部它们使用数组。另一方面,IEnumerable 只是 every 容器之上的一个接口。它返回项目的顺序取决于该容器
-
当您
Add列表中的某些内容时,它会添加到指定索引处。 (最后一个 + 1)。 -
为什么要问这个问题?背后有什么不同的问题吗?某些操作可能会返回意外结果?