2011-08-03 55 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是一個嵌套類,所以我懷疑什麼可能發生的情況是,你聲明的TSingleLinkNode成員,實際上並沒有宣佈T作爲SingleLinkNode一個泛型參數。如果你想SingleLinkNode是通用的,你仍然需要這樣做,但如果不是,那麼你可以簡單地使用該類作爲SingleLinkNode而不是SingleLinkNode<T>。我的意思

例子:

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框架的一部分。我猜測它沒有使用泛型實現,並且您需要添加一堆從objectT的強制轉換。

+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 ...

約翰