我正在尝试实现单链表。我无法编译以下代码。我从下面的代码片段中删除了很多与这个问题无关的不必要代码:
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/