我有问题List<T>.Reverse()
and Reverse(this IEnumerable<TSource> source)
。
看代码:
// Part 1
List<int> list = new List<int> { 1, 2, 3 };
foreach (int x in list)
Console.Write(x);
Console.WriteLine();
list.Reverse();
foreach (int x in list)
Console.Write(x);
Console.WriteLine();
list.Reverse();
// Part2
IList<int> ilist = list;
foreach (int x in list)
Console.Write(x);
Console.WriteLine();
ilist.Reverse();
foreach (int x in ilist)
Console.Write(x);
Console.WriteLine();
ilist.Reverse();
我的结果:
123
321
123
123
because Reverse()
-第 1 部分是List<T>.Reverse()
, Reverse()
-第2部分是Reverse(this IEnumerable<TSource> source)
我要执行List<int>.Reverse()
在第 2 部分中IList<int>
。我怎样才能做到呢?
IList<int>
没有Reverse
方法,所以它使用扩展方法。唯一的使用方法List<T>.Reverse
在你的IList<int>
引用是将其转换或转换为List<int>
。仅当您确定它确实是一个时,铸造才会起作用List<int>
首先:
IList<int> abstractList;
var concreteList = (List<int>)abstractList;
concreteList.Reverse();
另一种选择是create a List<int>
从你的IList<int>
实例,而不是假设它已经是一个List<int>
:
IList<int> abstractList;
var concreteList = new List<int>(abstractList);
concreteList.Reverse();
The reason那Reverse
扩展方法实际上并不影响底层列表,因为它运行于IEnumerable<T>
,这不一定是可写的(没有一个Enumerable
扩展方法对原始集合进行更改,它们返回new收藏)。
要使用此版本Reverse
,只需使用该产品Reverse
调用,而不是原始列表:
IList<int> abstractList;
IEnumerable<int> reversedList = abstractList.Reverse();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)