Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表或数组的顺序是否始终相同?_C#_List_Integer - Fatal编程技术网

C# 列表或数组的顺序是否始终相同?

C# 列表或数组的顺序是否始终相同?,c#,list,integer,C#,List,Integer,考虑一下int的简单列表: var ints = new List<int> { 1, 2, 3 }; 它会一直是1,3,4吗 如果我编辑了一个元素呢?这些只是整数,但如果它们是复杂的对象,比如person,我抓到了person,Bob可以在任何索引上,比如说,添加了他的整个传记 它会改变列表的顺序吗 我可以使用OrderBy,但我只想知道列表的顺序是否相同。列表基本上只是一个具有更多功能的高级数组 这意味着,如果您向列表中添加了某个内容,它将保持在同一位置 但是如果你在列

考虑一下int的简单列表:

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);
}