从类数组中获取已实现接口的枚举器

时间:2015-03-02 11:21:17

标签: c# ienumerable

我有这样的功能

sealed class AssignedTasks : IReadonlyAssignedTasks { ... }

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

我有错误

  

无法隐式转换类型&#39; System.Collections.IEnumerator&#39;至   &#39; System.Collections.Generic.IEnumerator&#39 ;.   存在显式转换(您是否错过了演员?)

2 个答案:

答案 0 :(得分:1)

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

您需要在返回枚举器之前强制转换项目

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

答案 1 :(得分:0)

因为_assignedTask是数组而_assignedTasks.GetEnumerator()将返回IEnumerable的非泛型版本。尝试以下它可以工作

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

查看MSDN文档here