IEnumerator к дженерикам. - PullRequest
       18

IEnumerator к дженерикам.

0 голосов
/ 01 декабря 2008

У меня есть несколько классов, к которым я пытаюсь перейти с использованием обобщений

Класс1: Кривая

этот класс имеет следующий код:

public class Curve : IEnumerable

  IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator(); // Calls non-interface method
    }

  public RTRatePointEnumerator GetEnumerator()
    {
        return new RTRatePointEnumerator(_hash);
    }

Класс 2:

  public class CurvePointEnumerator : IEnumerator

Какое рекомендуемое преобразование этих двух классов в использование обобщенных

Ответы [ 2 ]

1 голос
/ 01 декабря 2008

Вы не указали тип, возвращаемый из перечислителя. но я собираюсь угадать, исходя из названий, это RTRatePoint и CurvePoint. Я бы изменил код следующим образом

class Curve: IEnumerable<RTRatePoint> {
  IEnumerator<RTRatePoint> IEnumerable<RTRatePoint>.GetEnumerator() { 
    return GetEnumerator();
  }
  public RTRatePointEnumerator GetEnumerator() {
    return new RTRatePointEnumerator(_hash);
  }
}

class CurvePointEnumerator : IEnumerator<CurvePoint>

Одна вещь, которая может сбить вас с толку, заключается в том, что IEnumerator дополнительно реализует IDisposable, поэтому CurvePointEnumerator и RTRatePointEnumerator потребуется добавить метод Dispose. Вероятно, хотя этот метод может быть в значительной степени пустым. Причина в том, что если ты раньше ничего не выбрасывал, то сейчас нет необходимости.

void IDispose.Dispose() {
  // Nothing to see here
}
0 голосов
/ 01 декабря 2008

IEnumerable<T> and IEnumerator<T>

ага, он проглотил мой код

...