实现 IEnumerable数据结构
我遇到了以下实现二叉树的代码。为了方便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();
}
}
I came across the following code that implements a Binary Tree. For facilitating foreach, IEnumerable
is implemented. Is this the easiest way to make foreach work? I don't understand why two GetEnumerator()
functions are needed.
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();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一个返回
IEnumerator
,另一个返回IEnumerator
。这样,在 .NET 中引入泛型之前编写的遗留代码仍然可以使用此数据结构。One returns
IEnumerator<T>
the other returnsIEnumerator
. This is so that legacy code that was written before generics were introduced in .NET can still work with this data structure.