2011-08-03 52 views
6
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; 
    } 
} 

エラー:非ジェネリック型「System.Collections.IEnumerableは、」型引数と一緒に使用することはできません

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

私はこれを得るのはなぜ?

+1

あなたはSingleLinkNodeの定義を教えてください。 –

答えて

2

SingleLinkNodeクラスにジェネリック型パラメータを定義していないことは間違いありません。そのようなものとして、それを宣言しようとする試みは失敗しています。

エラーメッセージがSingleLinkNodeがネストされたクラスであることを示唆しているので、私は何が起こっすることができることは、あなたが実際にSingleLinkNodeのための一般的なパラメータとしてTを宣言せずに、タイプ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> 
} 

あなたは、これは動作しますが、あなたのネストされたクラスがジェネリックになりたいん場合:

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 
} 
19

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

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

+0

まだ何も\\ – Danpe

+3

彼はすでに彼のコードの**最初の行**に記載されています。 – WEFX

+0

真実ですが、この質問のタイトルが「非ジェネリック型System.Collections.IEnumerable」であると考えて、コードのコピー・ペーストで何かが変更されたと想定しました。 –

2

これは私のためにコンパイルされます。

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クラスを投稿する必要がありますers ...

ジョン