【问题标题】:Get an enumerator for the implemented interface from a class array从类数组中获取已实现接口的枚举器
【发布时间】:2015-03-02 11:21:16
【问题描述】:

我有这样的功能

sealed class AssignedTasks : IReadonlyAssignedTasks { ... }

interface IReadonlyAssigningInfo : IEnumerable<IReadonlyAssignedTasks> {}
sealed class AssigningInfo : IReadonlyAssigningInfo {
    private readonly AssignedTasks[] _assignedTasks;
    ...
    public IEnumerator<IReadonlyAssignedTasks> GetEnumerator()
    {
        return _assignedTasks.GetEnumerator();
    }
}

我有错误

无法将类型“System.Collections.IEnumerator”隐式转换为 'System.Collections.Generic.IEnumerator'。 存在显式转换(您是否缺少演员表?)

【问题讨论】:

  • 存在显式转换,你可以试试(IEnumerator&lt;IReadonlyAssignedTasks&gt;)_assignedTasks.GetEnumerator()
  • 使用 Linq 使其更具可读性,然后返回:return _assignedTasks.AsEnumerable().GetEnumerator();

标签: c# ienumerable


【解决方案1】:

问题是你想在数组包含类的时候返回接口。

您需要在返回枚举数之前转换项目

public IEnumerator<IReadonlyAssignedTasks> GetEnumerator()
{
    return _assignedTasks.Cast<IReadonlyAssignedTasks>().GetEnumerator();
}

【讨论】:

  • 或者只是做return _assignedTasks.AsEnumerable().GetEnumerator();
【解决方案2】:

因为 _assignedTask 是数组,而 _assignedTasks.GetEnumerator() 将返回非通用版本的 IEnumerable。试试看就行了

sealed class AssigningInfo : IReadonlyAssigningInfo {
    private readonly List<AssignedTasks> _assignedTasks;
    ...
    public IEnumerator<IReadonlyAssignedTasks> GetEnumerator()
    {
        return _assignedTasks.GetEnumerator();
    }
}

查看 MSDN 文档here

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2017-01-14
    相关资源
    最近更新 更多