2012-02-13 34 views
2

私はバイナリツリーを実装する次のコードを見つけました。 foreachを容易にするために、IEnumerableが実装されています。これはforeachを動作させる最も簡単な方法ですか?私はなぜ2つのGetEnumerator()機能が必要なのか分からない。IEnumerable <T>データ構造の実装

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

いずれかを返しますIEnumerator<T>他のリターンIEnumerator。これは、ジェネリックスの前に書かれたレガシーコードが.NETで導入されたため、このデータ構造でも動作するためです。

+0

レガシーコードを気にしないとすれば、どうして非ジェネリックな 'GetEnumerator'関数を削除できないのですか?それはコンパイルされません。 – devnull

+3

これはIEnumerable を実装しているため、レガシーGetEnumerator()をそのインターフェイスの一部として持つIEnumerableから継承しています。 –

関連する問題