2012-02-13 1 views
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(); 
     } 
} 

ответ

3

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

+0

Предположим, что мне не нужен устаревший код, почему я не могу удалить функцию «GetEnumerator»? Он не будет компилироваться. – devnull

+3

Это потому, что вы реализуете IEnumerable , который также наследует от IEnumerable, который имеет устаревший GetEnumerator() как часть его интерфейса. –