Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实施IEnumerable<;T>;数据结构_C#_Data Structures_Ienumerable - Fatal编程技术网

C# 实施IEnumerable<;T>;数据结构

C# 实施IEnumerable<;T>;数据结构,c#,data-structures,ienumerable,C#,Data Structures,Ienumerable,我遇到了以下实现二叉树的代码。为了方便foreach,实现了IEnumerable。这是做每件工作最简单的方法吗?我不明白为什么需要两个GetEnumerator()函数 public class BinaryTree<T> : IEnumerable<T> { .. public IEnumerator<T> InOrderTraversal() { ... yield

我遇到了以下实现二叉树的代码。为了方便foreach,实现了
IEnumerable
。这是做每件工作最简单的方法吗?我不明白为什么需要两个
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();
        }
}
公共类二进制树:IEnumerable
{
..   
公共IEnumerator InOrderTraversal()
{
...
收益率收益现值;
...         
}
公共IEnumerator GetEnumerator()
{
在OrderTraversal()中返回;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}

一个返回
IEnumerator
另一个返回
IEnumerator
。这样,在.NET中引入泛型之前编写的遗留代码仍然可以使用此数据结构。

假设我不关心遗留代码,为什么不能删除非泛型的
GetEnumerator
函数?这是因为您实现了IEnumerable,它也继承了IEnumerable,IEnumerable的接口中包含了遗留的GetEnumerator()。