C# 列表或数组的顺序是否始终相同?
考虑一下int的简单列表:C# 列表或数组的顺序是否始终相同?,c#,list,integer,C#,List,Integer,考虑一下int的简单列表: var ints = new List<int> { 1, 2, 3 }; 它会一直是1,3,4吗 如果我编辑了一个元素呢?这些只是整数,但如果它们是复杂的对象,比如person,我抓到了person,Bob可以在任何索引上,比如说,添加了他的整个传记 它会改变列表的顺序吗 我可以使用OrderBy,但我只想知道列表的顺序是否相同。列表基本上只是一个具有更多功能的高级数组 这意味着,如果您向列表中添加了某个内容,它将保持在同一位置 但是如果你在列
var ints = new List<int>
{
1, 2, 3
};
它会一直是1,3,4吗
如果我编辑了一个元素呢?这些只是整数,但如果它们是复杂的对象,比如person,我抓到了person,Bob可以在任何索引上,比如说,添加了他的整个传记
它会改变列表的顺序吗
我可以使用OrderBy,但我只想知道列表的顺序是否相同。列表基本上只是一个具有更多功能的高级数组 这意味着,如果您向列表中添加了某个内容,它将保持在同一位置 <>但是如果你在列表中间删除一些东西,它会把一个索引移动下来。 这意味着如果你有这个清单
List<int> numbers = new List<int>() {0, 1, 2, 3, 4};
{0, 2, 3, 4};
这意味着索引2上的数字现在在索引1上
只有更改列表本身,列表的顺序才会更改
删除和删除项目、添加项目或手动更改列表的顺序(例如orderBy)
如果更改列表中的对象,则不会更改
IEnumerable可以不同,因为它只是一个接口,指定了一些必须像GetEnumerator方法那样实现的方法。这意味着它取决于IEnumerable的实现
更多关于这个问题的信息
希望这有助于.Net framework中的列表和数组是基于索引的集合。 这意味着可以使用集合中的索引来访问集合中的元素-因此是的-它们都必须保持内部元素的相同顺序 这是因为List和T[]都实现了IList接口,该接口被定义为可以通过索引单独访问的对象集合 IEnumerable并不是真正排序的,它所做的只是公开一个名为GetEnumerator的方法——虽然它返回的IEnumerator提供了一个当前属性和一个表示顺序的MoveNext方法——但事实并非如此 事实上,得益于收益率回报,即使没有集合,您也可以创建IEnumerable-例如:
Random rnd = new Random();
IEnumerable<int> someMethod()
{
for(var i=0;i<10;i++)
yield return rnd.Next(1, 10);
}
IList实现IEnumerable接口,但并非相反
因此,要回答您的问题:
如果我循环通过它,它是否总是以相同的顺序1、2、3订购?即使我把它作为参数传递给函数?即使我将其作为一个线程要处理的列表传递
对
阵列不同吗
在这方面没有
那么IEnumerable呢
他们可能会有所不同 对。除非更改值,否则任何对象都是c。使用msdn时阅读了吗?对于方法,它甚至是第一句话。你检查过文档了吗?数组保证顺序,因为它们是数组—一个连续的内存块。列表也保证了这一点,并且在内部使用数组。另一方面,IEnumerable只是每个容器顶部的一个接口。它返回项目的顺序取决于该容器。当您在列表中添加某些内容时,它将添加到指定的索引中。最后一个+1。为什么要问这个问题?这背后有不同的问题吗?可能是某个返回意外结果的操作?
Random rnd = new Random();
IEnumerable<int> someMethod()
{
for(var i=0;i<10;i++)
yield return rnd.Next(1, 10);
}