Проблема при реализации класса обертки для массива при попытке реализовать IEnumerable - PullRequest
2 голосов
/ 17 октября 2010

Я реализую класс, который в основном оборачивает массив:

public abstract class IndividualBase : IEnumerable<Gene>
{
    private readonly Gene[] genoma;

    ...

    public IEnumerator<Gene> GetEnumerator()
    {
        return genoma.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return genoma.GetEnumerator();
    }
}

Проблема в том, что он доставляет мне проблемы с первым GetEnumerator() - он говорит мне, что

Невозможно неявно преобразовать тип 'System.Collections.IEnumerator' в 'System.Collections.Generic.IEnumerator'.Существует явное преобразование (вам не хватает приведения?)

Хотя я понимаю, в чем проблема, я абсолютно не знаю, как ее исправить.Кто-нибудь?

Спасибо

Ответы [ 2 ]

7 голосов
/ 17 октября 2010

Вы можете попробовать:

IEnumerable<Gene> typed = genoma;
return typed.GetEnumerator();

Просто чтобы порадовать компилятор.Хотя массивы реализуют универсальный интерфейс Enumerable, его нет в общедоступном GetEnumerator ().С учетом вышесказанного мы просто приводим предпочтительный API.Это тривиальный актерский состав;проверка не должна происходить во время выполнения (поскольку компилятор и CLI знают, что она действительна).

0 голосов
/ 17 октября 2010

Ваша проблема в том, что вы возвращаете IEnumerable, а не IEnumerble<Gene>

Измените его на:

return genoma.Cast<Gene>().GetEnumerator();

РЕДАКТИРОВАТЬ

Сохраняя это для другого способа сделать это, НО, я предпочитаю ответ Марка лучше.

...