开发者

The non-generic type 'System.Collections.IEnumerable' cannot be used with type arguments

using System.Collections.Generic;

public sealed class LoLQueue<T> where T: class
{
    private SingleLinkNode&l开发者_运维知识库t;T> mHe;
    private SingleLinkNode<T> mTa;

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

Error:

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

Why do i get this?


If you want to use IEnumerable<T>, as your post's title suggests, you need to include using System.Collections.Generic;.

As for the SingleLinkNode class, I don't know where you got it, it's not part of the .NET framework that I can see. I'd guess that it isn't implemented using generics, and you'll need to add a bunch of casts from object to T everywhere.


I'm pretty sure you haven't defined your SingleLinkNode class as having a generic type parameter. As such, an attempt to declare it with one is failing.

The error message suggests that SingleLinkNode is a nested class, so I suspect what may be happening is that you are declaring members of SingleLinkNode of type T, without actually declaring T as a generic parameter for SingleLinkNode. You still need to do this if you want SingleLinkNode to be generic, but if not, then you can simply use the class as SingleLinkNode rather than SingleLinkNode<T>.

Example of what I mean:

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

If you do want your nested class to be generic, then this will work:

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
}


This compiles for me:

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

You'll need to post your SingleLinkNode class for further answers...

John

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜