多个 IEnumerable 实现悖论

2023-11-23

  1. 我有一个通用的 A 类T>,实现 IEnumerableT[]>.
  2. 我想要一个继承自 Achar> 并实现 IEnumerablestring>.

    public class A<T> : IEnumerable<T[]>
    {
        public IEnumerator<T[]> GetEnumerator()
        {
            return Enumerate().GetEnumerator();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    
        protected IEnumerable<T[]> Enumerate()
        {
            throw new System.NotImplementedException();
        }
    }
    
    public class B : A<char>, IEnumerable<string>
    {
        public IEnumerator<string> GetEnumerator()
        {
            return Enumerate().Select(s => new string(s)).GetEnumerator();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
    

现在,这工作得很好,foreach 变量类型被推断为字符串:

B b = new B();
foreach (var s in b)
{
    string[] split = s.Split(' ');
}

但这不会编译,说“无法从使用中推断出类型参数,请尝试显式指定类型参数”:

string[] strings = b.ToArray();

然而,这有效:

string[] strings = b.ToArray<string>();

谁能解释一下这个编译器的行为吗?

显然,B 实现了 IEnumerablechar[]> 和 IEnumerablestring> 可能它无法弄清楚我想调用其中哪一个,但为什么它在“foreach”示例中工作正常?

请不要建议我通过组合来解决我的问题 - 这是我的最后手段。


区别如下:

foreach实际上寻找一个名为的公共方法GetEnumerator。它并不真正关心IEnumerable<T>。你的班B只有一个名为的公共方法GetEnumerator: 定义在B which hides中定义的一个A.

ToArray另一方面是一个扩展方法IEnumerable<T>。因为你的班级都是IEnumerable<string> and IEnumerable<char[]>两个通用参数之间的调用不明确string and char[].

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

多个 IEnumerable 实现悖论 的相关文章

  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • 带有 ASP.NET 按钮回发的 jQuery UI 对话框

    我的 ASP NET 页面上有一个运行良好的 jQuery UI 对话框 jQuery function jQuery dialog dialog draggable true resizable true show Transfer hi
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 如何在 C++ 中为指针“this”赋值

    在函数中 如何分配this一个新的价值 您可以分配对象this点于 this XY 但你不能分配直接值this this XY Error Expression is not assignable
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • 如何从 Powerpoint 2010 导出电影?

    如何使用 MS Office PIA 主互操作程序集 或其他方式以编程方式将嵌入视频从 powerpoint 2010 导出到外部文件 在演示文稿中嵌入视频是 Powerpoint 2010 中的一项新功能 我找不到解决方案 PPTX 文件
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • 在 Visual Studio 2012 Express 中设置 C++ 调试环境

    我需要调试的应用程序需要设置环境变量 这在 Visual Studio 2012 中似乎非常复杂 我想做类似的事情 set path c foo c bar c windows c program files application set
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • java程序抛出异常后如何继续执行?

    我的示例代码如下 public class ExceptionsDemo public static void main String args try int arr 1 2 3 4 5 6 7 8 9 10 for int i arr
  • Matlab中如何显示n位小数

    我想知道如何在Matlab中使用命令设置显示n位小数 n 必须限制在一些预先确定的数字吗 或者可以为 n 指定任意一个 感谢致敬 您可以将数字转换为字符串n小数位使用SPRINTF命令 gt gt x 1 23 gt gt sprintf
  • android - 线性布局bringToFront()

    我的线性布局中有 4 个按钮 我需要将第一个按钮放在前面 正常顺序是 Button 1 Button 2 Button 3 Button 4 但当我打电话时button1 bringToFront 功能 button1将会像这样结束 But
  • MWAA - 气流 - PythonVirtualenvOperator 需要 virtualenv

    我正在使用AWS的MWAA服务 2 2 2 运行各种 DAG 其中大多数都是使用标准 PythonOperator 类型实现的 我将 DAG 与任何共享需求一起捆绑到 S3 存储桶中 然后将 MWAA 指向相关对象和版本 到目前为止一切都进
  • 如何验证 pg_dump archive 生成​​的存档是否正确且有效?

    我正在为我使用的 postgresql 备份 恢复数据pg dump exe and pg restore exe 为了恢复备份文件 我必须删除数据库中的实际表 如果转储文件的某些内容不正常 这可能是 自杀性工作 我可以使用 例如 7z t
  • 如何在 Java 中对 Java 字符串进行转义?

    我正在使用 Java 处理一些 Java 源代码 我正在提取字符串文字并将它们提供给采用字符串的函数 问题是我需要将字符串的未转义版本传递给函数 即这意味着转换 n到换行符 并且 到一个单一的 etc Java API 中是否有一个函数可以
  • 什么时候在 Spark 数据帧上使用 persist() 性能不实用?

    在致力于提高代码性能时 因为我有许多作业失败 中止 我考虑使用persist 每当我需要在许多其他操作中使用相同的数据帧时 我都会在 Spark Dataframe 上使用该函数 在执行此操作并跟踪 Spark 应用程序 UI 中的作业 阶
  • 如何编译Linux内核模块?

    我正在尝试编译一个简单的 hello world 模块guide我很困惑Makefile实际上正在做 这里是 obj m hello 1 o all make C lib modules shell uname r build M PWD
  • 将字节数组反序列化为结构体

    我通过网络得到了一个字符 字节数组的传输 它包含一个标头和一些数据 我想将标头映射到结构上 这是一个例子 pragma pack 1 struct Header unsigned short bodyLength int msgID uns
  • 如何集成 Spring Security 和 Struts2

    我已经针对这个问题进行了大量的谷歌搜索 到目前为止我找不到任何关于集成 Struts2 和 Spring Security 的教程 我的问题是如何集成 Spring Security 和 Struts2 我希望限制某些操作或页面 例如管理页
  • 我可以从 Javascript 获取 iOS6 IDFA 吗?

    iOS6 为 iOS6 设备引入了 IDFA 广告标识符 能否从 iOS6 设备上 Safari 中运行的 Javascript 检索此 ID 或者它只是应用程序的功能 据我所知 这是一个仅限应用程序的功能 Safari 中似乎没有暴露
  • 使用 Jinja2 迭代 Python 字典

    我搜索了互联网 似乎找不到适合我的情况的解决方案 我有一本字典 1528430400000 129 1528516800000 123 14 1528603200000 117 28 1528689600000 111 42 1528776
  • 获取本地Android项目文件的文件路径

    我想以编程方式访问将包含在我的项目文件夹中的特定文件 有没有办法做到这一点 如果是这样 我应该将文件放在项目文件夹中的哪个位置 以及获取其文件路径的一些简单代码是什么 private void saveFileToDrive Thread
  • 如何将 ClickableTextCells 的列添加到 cellTable

    大家好 我需要一个简单的示例 展示如何将 ClickableTextCells 列添加到 cellTable thanks Column
  • 在 PHP 中本地化当前时间

    尝试用 PHP 显示当前时间 使用this date date m d Y h i s a time echo date 就这么简单 我如何本地化它 我想将月份和日期翻译成希伯来语 Thanks Zend Date已完全国际化 您应该检查一
  • 导入cloudstorage,语法错误:语法无效

    我想用Google 云存储客户端库函数 为此我必须import cloudstorage 为了得到cloudstorage我下载谷歌云存储客户端库 我尝试导入cloudstorage using python c import clouds
  • CQ5:继承/扩展对话框

    作为参考 我在 CQ5 5 我很好奇是否有任何方法可以扩展继承的对话框 而不覆盖它的父对话框 例如 具有如下结构 base page template dialog title description inerited from base
  • React eslint 错误在 props 验证中丢失

    我有下一个代码 eslint 抛出 反应 道具类型 onClickOut 道具验证中缺失 反应 道具类型的孩子 道具验证中缺失 propTypes已定义 但 eslint 无法识别它 import React Component PropT
  • Java类加载器委托模型?

    打电话时loadClass on a ClassLoader 是否ClassLoader首先检查该类是否已加载 或者是否立即将此检查委托给其父类ClassLoader Java API 说 当请求查找类或资源时 ClassLoader 实例
  • 多个 IEnumerable 实现悖论

    我有一个通用的 A 类T gt 实现 IEnumerableT gt 我想要一个继承自 Achar gt 并实现 IEnumerablestring gt public class A