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

标签 c# .net 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;
    }
}

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

标记为#1 的语句在语义上与#2 相似,并且正在编译。什么阻止程序编译?是否有任何genercis + inner classes相关规则导致上述代码无法编译?

请注意,以上代码片段是我重新发明轮子学习的一部分,并非生产代码。

最佳答案

每个内部类都声明自己的完全不同 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;
    }
}

关于c# - 无法编译包含泛型和内部类的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212461/

相关文章:

c# - 改进属性(property)监控代码?

c# - 在不打印文档的情况下获取打印页数

asp.net - Microsoft.Owin.Host.SystemWeb 和 Microsoft.Owin.Host.IIS 有什么区别

c# 重载方法的泛型函数

Java 类型删除和重载?

c# - 使用反射调用具有参数的方法

c# - 字符串未被识别为有效的日期时间

.net - 性能:XmlReader 或 LINQ to XML

.net - 为什么我的 .Net 应用程序会联系 Verisign?

c# - 将 SelectedItems 转换为 IEnumerable<MyType>