在迭代器中访问 C# 基类会导致 ReSharper 警告

2024-01-30

我有两节课GenericList and SpecificList, where SpecificList继承自GenericList. GenericList实施IEnumerable<GenericItem> and SpecificList实施IEnumerable<SpecificItem>. SpecificItem继承自GenericItem。我必须实施GetEnumerator同时GenericList and SpecificList因为他们实施IEnumerable<T>. In GenericList,这很简单,我只需返回底层的枚举器List<T>:

public IEnumerator<GenericItem> GetEnumerator()
{
    return genericItemsList.GetEnumerator();
}

然而,在SpecificList,看起来比较棘手。看来投掷有风险IEnumerator<GenericItem> to IEnumerator<SpecificItem>,我不知道这是否有效。相反,我做了以下事情:

public new IEnumerator<SpecificItem> GetEnumerator()
{
    IEnumerator<GenericItem> enumerator = base.GetEnumerator();
    while (enumerator.MoveNext())
    {
        yield return (SpecificItem)enumerator.Current;
    }
}

这编译得很好,并且是一个简单的 MSTest 单元测试调用SpecificList.GetEnumerator()似乎表明它有效。然而,ReSharper 强调base在上述方法中出现以下警告:

通过匿名方法、lambda 表达式、查询表达式或迭代器中的“base”关键字访问 GenericList.GetEnumerator 会导致无法验证的代码

这是我应该担心的事情吗?我应该做点不同的事情吗?

Edit:我正在使用 ReSharper 5.1 完整版预发布版本 5.1.1715.35。

Also, I should take a break from running MSTest unit tests: I just hit Ctrl+R, Ctrl+T in Chrome to reload the page...


R# 正确的是访问base在 3.0 版本的 C# 编译器中,迭代器/lambda 中的关键字可能会导致无法验证的代码。当它出现或不出现时有点复杂,我不会尝试在这里介绍它。

解决此问题的最简单方法是将调用包装到base.GetEnumerator在另一个非静态私有方法中并从迭代器引用该方法。

private IEnumerator<GenericItem> GetBaseEnumerator() {
  return base.GetEnumerator();
}

public new IEnumerator<SpecificItem> GetEnumerator()
{
    IEnumerator<GenericItem> enumerator = GetBaseEnumerator();
    while (enumerator.MoveNext())
    {
        yield return (SpecificItem)enumerator.Current;
    }
}

我相当确定这个错误已在 4.0 版本的 C# 编译器中得到修复。

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

在迭代器中访问 C# 基类会导致 ReSharper 警告 的相关文章

随机推荐

  • 为什么 object.constructor 是一个“函数”,而不是 TypeScript 中的“可更新”?

    在 TypeScript 中 我通常使用以下方式定义类类型的类型 declare type Type new args any any 例如 当类作为参数传递时可以使用它 这有点类似于Type是用C 编写的 但也可以直接实例化new操作员
  • 使用授权标头(Bearer)设置 Swagger (ASP.NET Core)

    我有一个 Web API ASP NET Core 我正在尝试调整 swagger 以从中进行调用 调用必须包含授权标头 并且我正在使用承载身份验证 来自 Postman 等第三方应用程序的呼叫一切正常 但我在设置 swagger 标头时遇
  • 在运行时转储执行数据

    我正在使用 JaCoCo 生成代码覆盖率报告 并且我有许多场景需要生成单独的报告 问题是该程序非常庞大 大约需要 2 分钟才能启动并加载所有类文件 我想在其中一个场景完成后立即获取运行时的执行数据 然后开始下一个场景 而不是为每个场景重新启
  • 使用 CSS3 堆叠媒体查询

    我正在尝试在 CSS 中堆叠媒体查询 但似乎无法让它正常工作 我想要实现的是拥有一组 css 规则any的媒体询问 我知道通常我可以使用and让它适用于不同的规则 但在这种情况下 我试图处理特定于供应商的前缀 因此浏览器不会满足所有条件 这
  • Rails formtastic 嵌套形式警告:无法批量分配受保护的属性

    我有以下型号 class CapstoneMilestone lt ActiveRecord Base attr accessible capstone id milestone id rank id status statusweight
  • 如何在 C# 中使用“for 循环”和“数组”反转整数

    我是 C 新手 正在学习反转整数 数字 我必须使用 forloop 和数组来完成代码 但我真的不知道如何使用它们 例如 如果输入是 1 2 3 4 5 6结果应该是 6 5 4 3 2 1 有人可以帮帮我吗 谢谢 编辑 我真的很抱歉 我忘记
  • 我可以用一个类名指定多个 CSS 类吗?

    我想在元素上指定几个 css 类 但我不想每次都重复上 3 4 或更多课 我想从 span class class1 backgroundclass borderclass iconclass Link span To span class
  • 意外删除了 Xaml 文件的隐藏代码。如何再次添加后面的代码?

    我没有错误地排除它 而是删除了 Xaml 文件背后的 cs 代码 现在 我不知道如何添加后面的代码 该窗口是空的 上面没有 UI 控件 查看代码 被禁用 我在任何地方都看不到此 xaml 的事件 闪电图标 请帮忙 有两个必需步骤和一个可选步
  • 在 MATLAB 中处理 Kinect 深度数据

    所以我使用 Kinect 获取了一些深度图像 现在将它们保存起来 那么如果我想处理这个深度图像以获得Z值 即物体到Kinect的距离 我应该怎么做 我一直在网上进行一些研究 发现我需要将图像保存为 16 位深度图像才能存储深度值 而不是只能
  • 未调用自定义 UITableVIewCell 初始化

    我有带有一些图像和标签的自定义 UiTablleviewCell 并且我想在 tableview 单元格中旋转标签 所以我想编辑 initWithStyle 方法 但似乎从未调用过它 id initWithStyle UITableView
  • 根据 groupby 之后其他列中的值之间的数据帧范围对单独的列求和

    我有一个数据框如下 id Supply days days 180 1 30 0 180 1 100 183 363 1 80 250 430 2 5 0 180 2 5 10 190 3 5 0 180 3 30 100 280 3 30
  • JQGrid是免费的吗?

    从以下位置下载 JQGrid js 文件http www trirand com blog http www trirand com blog 免费吗 这是什么http www trirand net demoaspnetmvc aspx
  • 安卓屏幕分辨率

    Android 中已经定义了一些屏幕分辨率 他们是 QVGA 240 320 低密度 小屏幕 WQVGA 240 400 低密度 普通屏幕 FWQVGA 240 432 低密度 普通屏幕 HVGA 320 480 中等密度 普通屏幕 WVG
  • NameError:Python 中未定义名称“reduce”

    我正在使用Python 3 2 尝试过这个 xor lambda x y x y 2 l reduce xor 1 2 3 4 并得到以下错误 l reduce xor 1 2 3 4 NameError name reduce is no
  • 什么可能导致 MSIExec 错误 1619“无法打开此安装包”

    我正在尝试从一组示例程序中自动执行一组 MSI 文件 由 WiX 生成 的往返安装和卸载 由于某种原因 双击后会生成一个非常适合安装的 MSI 文件 无法打开该安装包 验证该包是否存在并且您可以访问它 或者联系应用程序供应商以验证这是否是有
  • 在后台获取核心数据

    我有一个带有表视图的导航视图 当单击一行时 行索引路径将传递到下一个视图 在详细信息视图 viewDidLoad 中 我正在从 Core Data 获取数据 我使用从应用程序委托中获取 appDelegate loadItem i 正如你所
  • publicId 和 systemId 之间需要空格

    我试图通过在 jsp 中编写一些代理代码来从我的计算机本地对其他域进行 ajax 调用 这是我调用 proxy jsp 页面的 jQuery AJAX 代码 var metadata https rest search host com m
  • 是否可以从 clickhouse 表中删除旧记录?

    据我所知 clickhouse只允许插入新数据 但是是否可以删除早于某个时间段的块以避免硬盘溢出 轻量级删除 自 v22 8 起可用 MergeTree 表的标准 DELETE 语法已在 37893 https github com Cli
  • 不存在的列不应破坏 select 中的 sql 查询

    就我而言 有不同的数据库版本 SQL Server 例如我的桌子orders有专栏htmltext在版本 A 中 但在版本 B 中列htmltext不见了 Select order id order date htmltext from o
  • 在迭代器中访问 C# 基类会导致 ReSharper 警告

    我有两节课GenericList and SpecificList where SpecificList继承自GenericList GenericList实施IEnumerable