为什么IEnumerable<T>.Reverse()与原始集合一起返回反向集合,而List<T>反转原始集合本身?这让我有点困惑,因为List<T>继承自IEnumerable<T>。
发布于 2015-05-15 15:36:17
从概念上讲,这可能是因为当您想要表示一个不可变的项集合时,可以使用IEnumerable。也就是说,您只想读取列表中的项,而不想添加/插入/删除或以其他方式更改集合。在这个数据视图中,以不同的顺序返回一个新的IEnumerable是预期的结果。当您使用List时,您希望能够添加/插入/删除或以其他方式更改集合,因此在该上下文中需要一个更改原始列表顺序的Reverse方法。
正如其他人所指出的,IEnumerable是一个接口,List是一个类。List实现了IEnumerable。
所以,
IEnumerable<String> names = new List<String>();
var reversedNames = names.Reverse();给你第二个名单,倒过来。然而,
List<String> names = new List<String>();
names.Reverse(); 颠倒原来的列表。我希望这是合理的。
发布于 2015-05-15 15:26:34
因为它们是两种不同的方法。
List.Reverse是List<T>上的一个实例方法。这将修改现有的列表。
Enumerable.Reverse是IEnumerable<T>上的一种扩展方法。这将创建一个以反向顺序枚举源序列的新序列。
您可以在List<T>上使用后者,方法是作为静态方法调用:
var list = new List<string>{"1","2"};
var reversed = Enumerable.Reverse(list)或者通过铸造到IEnumerable<T>
IEnumerable<string> list = new List<string>{"1","2"};
var reversed = list.Reverse();在这两种情况下,list保持不变,枚举时reversed返回{"2","1"}。
发布于 2015-05-15 15:26:23
Reverse on IEnumerable<T>是Linq的一部分,被添加为扩展方法(Enumerable.Reverse<T>)。它是在Reverse为List<T>实现之后添加的。
IEnumerable<T>也不是对象的集合。它只是告诉消费者如何获得那些物品。
https://stackoverflow.com/questions/30263223
复制相似问题