c# - 实现通用 IEnumerator 和 IComparable 的问题

标签 c# generics interface icomparable ienumerator

我正在研究 AVL 树。树本身似乎在工作,但我需要一个迭代器来遍历树的值。因此我尝试实现 IEnumerator 接口(interface)。不幸的是,我在实现 IEnumerator 和 IComparable 时遇到编译时错误。首先是代码,然后是错误。

class AvlTreePreOrderEnumerator<T> : IEnumerator<T> where T :IComparable<T>
{
    private AvlTreeNode<T> current = default(T);
    private AvlTreeNode<T> tree = null;
    private Queue<AvlTreeNode<T>> traverseQueue = null;

    public AvlTreePreOrderEnumerator(AvlTreeNode<T> tree)
    {
        this.tree = tree;

        //Build queue
        traverseQueue = new Queue<AvlTreeNode<T>>();
        visitNode(this.tree.Root);
    }

    private void visitNode(AvlTreeNode<T> node)
    {
        if (node == null)
            return;
        else
        {
            traverseQueue.Enqueue(node);
            visitNode(node.LeftChild);
            visitNode(node.RightChild);
        }
    }

    public T Current
    {
        get { return current.Value; }
    }

    object IEnumerator.Current
    {
        get { return Current; }
    }

    public void Dispose()
    {
        current = null;
        tree = null;
    }

    public void Reset()
    {
        current = null;
    }

    public bool MoveNext()
    {
        if (traverseQueue.Count > 0)
            current = traverseQueue.Dequeue();
        else
            current = null;

        return (current != null);
    }
}

VS2008报错: 错误 1 ​​类型“T”不能用作泛型类型或方法“Opdr2_AvlTreeTest_Final.AvlTreeNode”中的类型参数“T”。没有从“T”到“System.IComparable”的装箱转换或类型参数转换。

此错误出现在以下几行:

    //members
    private AvlTreeNode<T> current = default(T);  //current highlighted
    private AvlTreeNode<T> tree = null;   //tree highlighted
    private Queue<AvlTreeNode<T>> traverseQueue = null;   //traverseQueue highlighted  

    //Constructor
    public AvlTreePreOrderEnumerator(AvlTreeNode<T> tree)  // AvlTreePreOrderEnumerator highlighted  
    //Method
    private void visitNode(AvlTreeNode<T> node)   //visitNode highlighted  

目前我还没有包含树和节点逻辑。我有谁认为有必要解决这个问题,就直说吧!

谢谢!

最佳答案

你能试试把它改成这个吗

class AvlTreePreOrderEnumerator<T> : IEnumerator<T> where T :IComparable

关于c# - 实现通用 IEnumerator 和 IComparable 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839884/

相关文章:

kotlin - 通用接口(interface)继承

c# - 将 URI 转换为 GUID

java - Kotlin 生成通用 java 代码

Swift:如何从通用内存存储中检索不同类型和命名的主键?

c# - 具有采用不同泛型类的方法的泛型类

c++ - com 对象和接口(interface)

c# - 如何在 WPF 中重新加载(重置)整个页面?

c# - 表单提交后 MVC 从 View 返回填充模型

c# - Moq - 验证在测试执行期间更改参数的调用

java - 如何使用这样的Java接口(interface)?