Реализация структуры данных IEnumerable <T> - PullRequest
2 голосов
/ 13 февраля 2012

Я наткнулся на следующий код, который реализует двоичное дерево.Для облегчения foreach реализовано IEnumerable.Это самый простой способ заставить foreach работать?Я не понимаю, зачем нужны две GetEnumerator() функции.

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();
        }
}

1 Ответ

3 голосов
/ 13 февраля 2012

Один возвращает IEnumerator<T> Другой возвращает IEnumerator. Это связано с тем, что унаследованный код, который был написан до введения обобщений в .NET, все еще может работать с этой структурой данных.

...