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
なぜ私はこれを手に入れるのですか?
SingleLinkNode
クラスをジェネリック型パラメーターを持つものとして定義していないと確信しています。そのため、1つで宣言する試みは失敗しています。
エラーメッセージは、SingleLinkNode
がネストされたクラスであることを示しているため、実際にはSingleLinkNode
をT
の汎用パラメーターとして宣言せずに、タイプT
のSingleLinkNode
のメンバーを宣言している可能性があります。 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
}
投稿のタイトルが示すように、IEnumerable<T>
を使用する場合は、using System.Collections.Generic;
を含める必要があります。
SingleLinkNodeクラスに関しては、どこで入手したかわかりません。私が見ることができる.NETフレームワークの一部ではありません。ジェネリックを使用して実装されていないのではないかと思います。どこにでもobject
からT
までのキャストを追加する必要があります。
これは私のためにコンパイルします:
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クラスを投稿する必要があります...
ジョン