首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reverse<>和反转

Reverse<>和反转
EN

Stack Overflow用户
提问于 2014-06-16 17:59:56
回答 2查看 383关注 0票数 4

我有一个关于在C#中颠倒列表元素的问题。

最终目标是获取列表的最后N个元素。

假设我有一个小数列表。

代码语言:javascript
复制
List<decimal> listOfDecimals = new List<decimal>() { 1.5m, 2.4m, 3.6m, 0.1m };

这是我尝试获取一个包含listOfDecimals的最后两个元素的列表。

代码语言:javascript
复制
List<decimal> listOfLastTwoElements = listOfDecimals.Reverse<decimal>().Take<decimal>(2).Reverse<decimal>().ToList<decimal>();

我的问题是,如果我用Reverse()替换了Reverse<>(),就会有一个由VS标记的语法错误。

谁能告诉我什么时候应该使用Reverse(),什么时候使用Reverse<>()?

EN

回答 2

Stack Overflow用户

发布于 2014-06-16 18:06:54

这是因为List本身有一个Reverse method。此反向方法不返回任何内容。

List<T>上的反向方法优先于IEnumerable<T>上的扩展方法。令人困惑的是,当你只有一个类型时,你可以使用不带类型参数的Reverse()。然后,编译器的类型推断将解析泛型类型参数。因此,扩展方法看起来与List<T>上的方法相同。

代码语言:javascript
复制
var reversed1 = Enumerable.Empty<int>().Reverse(); // works
var reversed2 = Enumerable.Empty<int>().Reverse<int>(); // works and is the same as the line above.

var reversed3 = new List<int>().Reverse(); // does not work
var reversed4 = new List<int>().Reverse<int>(); // works
票数 9
EN

Stack Overflow用户

发布于 2014-06-16 18:09:44

Reverse()是List<T>的一个方法,Reverse<T>()IEnumerable<T>的一个(扩展)方法,所以它包含了List<T>

如果你想获取IEnumerable的最后两个元素,你可以直接使用Last(2)。这将返回一个IEnumerable<T>,所以如果你想在列表中找到它,你必须对它调用ToList

代码语言:javascript
复制
List<T> also has a method `RemoveRange()`, so if you want to remove all but the last 2 elements:

listOfDecimals.RemoveRange(0, listOfDecimals.Count - 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24241084

复制
相关文章

相似问题

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