Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как сделать foreach по предку?


Автор: Dims 14.3.2010, 15:32
У меня класс имплементит IEnumerable<T>. Я хочу в наследнике частично переопределить GetEnumerator(), то есть, в одном случае yield return что-то своё, а в другом -- то, что возвращает предок.

Вот так не даёт:

Код

public override IEnumerator<object> GetEnumerator()
        {
            if (!matched)
            {
                yield return minCount;
                yield return maxCount;
                yield return sample;
            }
            else
            {
                foreach (object o in base)
                {
                    yield return o;
                }
            }
            
        }


Добавлено через 2 минуты и 29 секунд
Вот так можно, но некрасиво:

Код

public override IEnumerator<object> GetEnumerator()
        {
            if (!matched)
            {
                yield return minCount;
                yield return maxCount;
                yield return sample;
            }
            else
            {
                IEnumerator<object> bi = base.GetEnumerator();
                while (bi.MoveNext())
                {
                    yield return bi.Current;
                }
            }
            
        }

Автор: Любитель 14.3.2010, 20:32
Ээ.. Первое, что напрашивается - написать в else блоке return base.GetEnumerator();. И всё.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)