У меня есть такая функция

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. Существует явное преобразование (вам не хватает приведения?)

0
Yola 2 Мар 2015 в 14:21

2 ответа

Лучший ответ

Проблема в том, что вы хотите вернуть интерфейс, пока массив содержит класс.

Вам необходимо привести элементы перед возвратом перечислителя

public IEnumerator<IReadonlyAssignedTasks> GetEnumerator()
{
    return _assignedTasks.Cast<IReadonlyAssignedTasks>().GetEnumerator();
}
1
jgauffin 2 Мар 2015 в 11:29

Поскольку _assignedTask является массивом, а _assignedTasks.GetEnumerator () вернет неуниверсальную версию IEnumerable. Попробуйте следовать, это сработает

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

Загляните в документацию MSDN здесь.

0
Jenish Rabadiya 2 Мар 2015 в 11:29