首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerable<T>.Reverse与List<T>.Reverse的区别

IEnumerable<T>.Reverse与List<T>.Reverse的区别
EN

Stack Overflow用户
提问于 2015-05-15 15:23:31
回答 6查看 4.8K关注 0票数 9

为什么IEnumerable<T>.Reverse()与原始集合一起返回反向集合,而List<T>反转原始集合本身?这让我有点困惑,因为List<T>继承自IEnumerable<T>

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-05-15 15:36:17

从概念上讲,这可能是因为当您想要表示一个不可变的项集合时,可以使用IEnumerable。也就是说,您只想读取列表中的项,而不想添加/插入/删除或以其他方式更改集合。在这个数据视图中,以不同的顺序返回一个新的IEnumerable是预期的结果。当您使用List时,您希望能够添加/插入/删除或以其他方式更改集合,因此在该上下文中需要一个更改原始列表顺序的Reverse方法。

正如其他人所指出的,IEnumerable是一个接口,List是一个类。List实现了IEnumerable

所以,

代码语言:javascript
复制
 IEnumerable<String> names = new List<String>();
 var reversedNames = names.Reverse();

给你第二个名单,倒过来。然而,

代码语言:javascript
复制
 List<String> names = new List<String>();
 names.Reverse(); 

颠倒原来的列表。我希望这是合理的。

票数 8
EN

Stack Overflow用户

发布于 2015-05-15 15:26:34

因为它们是两种不同的方法。

List.ReverseList<T>上的一个实例方法。这将修改现有的列表。

Enumerable.ReverseIEnumerable<T>上的一种扩展方法。这将创建一个以反向顺序枚举源序列的新序列。

您可以在List<T>上使用后者,方法是作为静态方法调用:

代码语言:javascript
复制
var list = new List<string>{"1","2"};
var reversed = Enumerable.Reverse(list)

或者通过铸造到IEnumerable<T>

代码语言:javascript
复制
IEnumerable<string> list = new List<string>{"1","2"};
var reversed = list.Reverse();

在这两种情况下,list保持不变,枚举时reversed返回{"2","1"}

票数 8
EN

Stack Overflow用户

发布于 2015-05-15 15:26:23

Reverse on IEnumerable<T>是Linq的一部分,被添加为扩展方法(Enumerable.Reverse<T>)。它是在ReverseList<T>实现之后添加的。

IEnumerable<T>也不是对象的集合。它只是告诉消费者如何获得那些物品。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30263223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档