4

単一リンクリストを実装しようとしています。次のコードをコンパイルできません。以下のスニペットから、この質問に関係のない多くの不要なコードを削除しました。

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 と意味的に類似しており、コンパイル中です。プログラムのコンパイルを停止しているのは何ですか? 上記のコードがコンパイルされない原因となっているジェネリック + 内部クラス関連のルールはありますか?

上記のコード スニペットは、車輪の再発明による私の学習の一部であり、製品コードではないことに注意してください。

4

1 に答える 1

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;
    }
}
于 2013-01-08T10:07:48.010 に答える