IEnumerator для дженериков.
-
11-07-2019 - |
Вопрос
у меня есть несколько классов, к которым я пытаюсь перейти, используя дженерики
Класс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
каково рекомендуемое преобразование этих двух классов для использования дженериков
Решение
Вы не указали тип, возвращаемый из перечислителя. но я собираюсь угадать, исходя из названий, это 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 < T > дополнительно реализует IDisposable, поэтому для CurvePointEnumerator и RTRatePointEnumerator потребуется добавить метод Dispose. Вероятно, хотя этот метод может быть почти пустым. Причина в том, что если ты раньше ничего не выбрасывал, то сейчас нет необходимости. Р>
void IDispose.Dispose() {
// Nothing to see here
}
Другие советы
IEnumerable<T> and IEnumerator<T>
хах, он проглотил мой код