反转<>和反转

Roy*_*Roy 4 c# reverse

我有一个关于在C#中反转列表元素的问题.

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

假设我有一个小数列表.

List<decimal> listOfDecimals = new List<decimal>() { 1.5m, 2.4m, 3.6m, 0.1m };
Run Code Online (Sandbox Code Playgroud)

这是我尝试获取包含listOfDecimals的最后2个元素的列表.

List<decimal> listOfLastTwoElements = listOfDecimals.Reverse<decimal>().Take<decimal>(2).Reverse<decimal>().ToList<decimal>();
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我用Reverse()替换Reverse <>(),则会出现由VS标记的语法错误.

任何人都可以告诉我何时应该使用Reverse(),何时使用Reverse <>()?

Rub*_*ben 9

这是因为List本身有一个Reverse方法.这种反向方法不会返回任何内容.

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

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
Run Code Online (Sandbox Code Playgroud)