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

2023-11-24

我有问题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 reasonReverse扩展方法实际上并不影响底层列表,因为它运行于IEnumerable<T>,这不一定是可写的(没有一个Enumerable扩展方法对原始集合进行更改,它们返回new收藏)。

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

IList<int> abstractList;
IEnumerable<int> reversedList = abstractList.Reverse();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 IList<>.Reverse() 不像 List<>().Reverse 那样工作 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 解压 R 数据框中的列表

    我有一个dataframe其中一个字段包含不同长度的列表 我想将该字段中列表的每个元素提取到其自己的字段中 以便我可以将结果收集到一个很长的字段中dataframe每个列表元素都有一个 id 这是一个例子dataframe dat lt s
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 如何从鼠标坐标获取基本鼠标方向

    是否可以根据鼠标最后位置和当前位置获取鼠标方向 左 右 上 下 我已经编写了代码来计算两个向量之间的角度 但我不确定它是否正确 有人可以指出我正确的方向吗 public enum Direction Left 0 Right 1 Down
  • 如何在 django 模型字段中强制使用 char(N) 数据类型而不是 varchar(N)

    根据 django 文档https docs djangoproject com en 1 9 topics db models 这是 ORM 创建的varchar字段而不是char from django db import models
  • YAML:转储不带引号的 Python 列表

    我有一个Python列表 my list看起来像这样 test1 test2 test3 我只是想将其转储到不带引号的 YAML 文件 所以期望的输出是 test 1 test 2 test 3 我试过了 import yaml with
  • virtualenv --system-site-packages 不使用系统站点包

    我的印象是 将 system site packages 标志与 virtualenv 一起使用将允许虚拟环境使用已安装的系统软件包 然而我发现事实并非如此 我正在使用 python 的自定义编译版本 您可以通过以下步骤看到问题 user
  • 连接到 MySQL 导致错误“未找到数据源名称且未指定默认驱动程序”

    我正在尝试使用 ASP NET Web 表单应用程序连接到 MySQL 数据库 我正在进行一项测试 将 MySQL 数据库中的数据绑定到GridView 这是我的代码 Dim strMySQLConn As String DRIVER My
  • iPhone 上的 OpenGL ES 1.1 或 2.0

    据我了解 iPhone 操作系统的升级将 OpenGL ES 版本支持从 1 1 升级到了 2 0 我一直无法找到的是是否应该努力使用 1 1 来向后兼容旧设备 Xcode 似乎建议我使用 2 0 因为它似乎只包含该版本 我应该使用2 0而
  • UDP 和套接字,recvfrom() 返回 -1 且资源暂时不可用

    我有一个客户端和一个服务器 在 C 中使用数据报 UDP 进行通信 客户端发送 5 条消息 收到消息后 服务器发回消息 在客户端完成接收消息之前 接收和发送消息都很好 服务器发回所有消息后 使用 close 终止 所以来自客户端的recvf
  • 清除所选选项卡中所有文本框的文本

    我有一个表格 其中有一个tab control每个选项卡都有多个textboxes labels and buttons 我想让用户能够清除所选选项卡文本框中的所有文本 我努力了 private void resetCurrentPageT
  • 如何在 OS X 10.8.4 上为 iOS 模拟器 (6.1) 编译 Boost 1.54.0 (1.54)?

    我已经成功地编译了几个 Boost 库 并使用以下脚本创建了一个与 OS X iOS 和 iOS 模拟器一起使用的框架 https github com wuhao5 boost blob 188e905626dbd522f65950102
  • 如何在 Perl 6 中使类参数化?

    通常在 Perl 6 中 只允许角色是参数化的 在这里 我们将尝试创建类 kind 从这里开始称为元对象 通常不允许是参数化的 参数化的 如果您尝试以简单的方式使类参数化 则会发生这种情况 bastille perl6 e class Fo
  • 为什么Chrome的隐身模式比正常模式检索资源更快?

    我在多台机器 台式机和笔记本电脑 和操作系统 Windows 和 Mac 上进行了测试 我可以复制相同的行为 在隐身模式下资源下载速度更快 不是渲染速度 我粗略地想到隐身模式和正常模式分别可以更快的两种情况 隐身模式可以更快 因为它没有扩展
  • 支持 goto 的 Java 编译器或 JVM 语言?

    是否有一个 java 编译器标志允许我使用goto作为一个有效的构造 如果没有的话有没有第三方java编译器支持goto 如果不支持的话还有其他语言支持吗goto同时可以方便的调用Java编写的方法 原因是我正在编写一种用 Java 实现的
  • 如何序列化静态类的非静态子类

    我想序列化一个非常普通的类 但问题是它嵌套在一个静态类中 如下所示 public static class StaticClass Serializable public class SomeType 这段代码 StaticClass So
  • Laravel 5.4 迁移时用户 root@localhost 访问被拒绝

    我对 Laravel 有一种奇怪的感觉 我有一个坏习惯 即使用 laravel 项目在虚拟盒子上创建项目进行测试 debian 最后稳定版当前为 9 1 nginx php7 1 MariaDB 在你告诉我去某个地方阅读另一篇文章之前 请阅
  • json 列与多列

    我什至不知道是否调用它序列化列是的 但我要解释一下自己 例如 我有一个用户表 我想存储用户的电话号码 手机 家庭 办公室等 所以 我想制作一个专栏对于每种数字类型 但同时我的脑海中浮现出一个想法 如果我保存一个怎么办 json字符串在一个列
  • 将 32 位变量移位 32 位有什么不好?

    我最近买了一本 Bruce Schneier 写的 应用密码学 读起来很不错 我现在了解了书中概述的几种算法是如何工作的 并且我想开始用 C 语言实现其中的一些算法 许多算法的共同点是将 x 位密钥划分为几个较小的 y 位密钥 例如 Blo
  • mongodb连接池

    我正在使用 Java 驱动程序来访问 mongodb 我假设数据库连接池是由驱动程序内部处理的 但是每次访问数据库时 我的连接计数都会增加 这是我的服务器状态日志 connections current 276 available 543
  • 将字符串插入到另一个字符串中

    好的 我有一个 char stringA 和 char stringB 我希望能够将 stringB 在 x 点插入到 stringA 中 char stringA abcdef char stringB 123 与产品 ab123cdef
  • “WCF”是什么意思? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能定义WCF WCF 的目的是什么 有哪些学习 WCF 的好阅读材料 WCF Windows 通信基础 是 Microsoft 使用的名称框架 t
  • 为什么 IList<>.Reverse() 不像 List<>().Reverse 那样工作

    我有问题List