2
Я натолкнулся на следующий код, который реализует двоичное дерево. Для облегчения foreach реализован IEnumerable
. Это самый простой способ сделать работу foreach? Я не понимаю, почему нужны две функции GetEnumerator()
.Внедрение IEnumerable <T> datastructure
public class BinaryTree<T> : IEnumerable<T>
{
..
public IEnumerator<T> InOrderTraversal()
{
...
yield return curr.Value;
...
}
public IEnumerator<T> GetEnumerator()
{
return InOrderTraversal();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Предположим, что мне не нужен устаревший код, почему я не могу удалить функцию «GetEnumerator»? Он не будет компилироваться. – devnull
Это потому, что вы реализуете IEnumerable, который также наследует от IEnumerable, который имеет устаревший GetEnumerator() как часть его интерфейса. –