无法编译包含泛型和内部类的代码

Ana*_*tel 4 .net c# generics inner-classes

我正在尝试实施单一链接列表.我无法编译以下代码.我已从以下代码段中删除了许多与此问题无关的不必要代码:

public class SinglyLinkedList<T>
{
    public SinglyLinkedList()
    {
    }

    private SinglyNode<T> _head = null;

    private class SinglyNode<T>
    {
        public T Data { get; set; }
        public SinglyNode<T> Next { get; set; }
    }

    private class Enumerator<T>
    {
        public Enumerator(SinglyLinkedList<T> list)
        {
            _list = list; //#1
            _head = list._head; //#2
        }

        private SinglyLinkedList<T> _list = null;
        private SinglyNode<T> _head = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

标记为#2的语句失败并出现错误 - Cannot implicitly convert type 'SinglyLinkedList<T>.SinglyNode<T>' to 'SinglyLinkedList<T>.SinglyNode<T> Program.cs

标记为#1的语句在语义上类似于#2并且正在编译.什么阻止程序编译?是否存在导致上述代码无法编译的genercis +内部类相关规则?

请注意上面的代码片段是我学习的一部分,通过重新发明轮子而不是生产代码.

Mar*_*ell 9

每个内部类都声明自己完全不同 T.

只需T从内部类中删除所有内容即可:

public class SinglyLinkedList<T>
{
    public SinglyLinkedList()
    {
    }

    private SinglyNode _head = null;

    private class SinglyNode
    {
        public T Data { get; set; }
        public SinglyNode Next { get; set; }
    }

    private class Enumerator
    {
        public Enumerator(SinglyLinkedList<T> list)
        {
            _list = list; //#1
            _head = list._head; //#2
        }

        private SinglyLinkedList<T> _list = null;
        private SinglyNode _head = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @AnandPatel简单地说就是"规则":嵌套类自动从父类中继承任何泛型类型参数; 所以`SinglyNode`已经******通用 - 但是通过父母.它是`SinglyLinkedList <T> .SinglyNode`; `SinglyLinkedList <int> .SinglyNode`是与`SinglyLinkedList <string>不同的类型.SinglyNode` (2认同)