web-dev-qa-db-ja.com

非ジェネリック型 'System.Collections.IEnumerable'は型引数と一緒に使用できません

using System.Collections.Generic;

public sealed class LoLQueue<T> where T: class
{
    private SingleLinkNode<T> mHe;
    private SingleLinkNode<T> mTa;

    public LoLQueue()
    {
        this.mHe = new SingleLinkNode<T>();
        this.mTa = this.mHe;
    }
}

エラー:

The non-generic type 'LoLQueue<T>.SingleLinkNode' cannot be used with type arguments

なぜ私はこれを手に入れるのですか?

9
Danpe

SingleLinkNodeクラスをジェネリック型パラメーターを持つものとして定義していないと確信しています。そのため、1つで宣言する試みは失敗しています。

エラーメッセージは、SingleLinkNodeがネストされたクラスであることを示しているため、実際にはSingleLinkNodeTの汎用パラメーターとして宣言せずに、タイプTSingleLinkNodeのメンバーを宣言している可能性があります。 SingleLinkNodeを汎用にしたい場合でもこれを行う必要がありますが、そうでない場合は、クラスをSingleLinkNode<T>ではなくSingleLinkNodeとして使用できます。

私が言っていることの例:

public class Generic<T> where T : class
{
    private class Node
    {
        public T data; // T will be of the type use to construct Generic<T>
    }

    private Node myNode;  // No need for Node<T>
}

doネストされたクラスを汎用にしたい場合、これは機能します。

public class Generic<T> where T : class
{
    private class Node<U>
    {
        public U data; // U can be anything
    }

    private Node<T> myNode;  // U will be of type T
}
2
dlev

投稿のタイトルが示すように、IEnumerable<T>を使用する場合は、using System.Collections.Generic;を含める必要があります。

SingleLinkNodeクラスに関しては、どこで入手したかわかりません。私が見ることができる.NETフレームワークの一部ではありません。ジェネリックを使用して実装されていないのではないかと思います。どこにでもobjectからTまでのキャストを追加する必要があります。

25
David Yaw

これは私のためにコンパイルします:

public sealed class SingleLinkNode<T>
{

}

public sealed class LoLQueue<T> where T : class
{
    private SingleLinkNode<T> mHe;
    private SingleLinkNode<T> mTa;

    public LoLQueue()
    {
        this.mHe = new SingleLinkNode<T>();
        this.mTa = this.mHe;
    }
}

さらに回答を得るには、SingleLinkNodeクラスを投稿する必要があります...

ジョン

2
JohnD