gpt4 book ai didi

c# - 为什么 IList<>.Reverse() 不像 List<>().Reverse 那样工作

转载 作者:可可西里 更新时间:2023-11-01 08:43:14 27 4
gpt4 key购买 nike

我对 List<T>.Reverse() 有疑问和 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

因为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();

另一种选择是创建 List<int>来自你的 IList<int>例如,而不是假设它已经是一个 List<int> :

IList<int> abstractList;
var concreteList = new List<int>(abstractList);
concreteList.Reverse();

Reverse原因扩展方法实际上并不影响底层列表是因为它在 IEnumerable<T> 上运行,这不一定是可写的(所有 Enumerable 扩展方法都不会更改原始集合,它们返回一个集合)。

要使用这个版本的Reverse , 只需使用 Reverse 的产品调用,而不是原始列表:

IList<int> abstractList;
IEnumerable<int> reversedList = abstractList.Reverse();

关于c# - 为什么 IList<>.Reverse() 不像 List<>().Reverse 那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com