2011-08-03 3 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 Framework에서 볼 수있는 부분이 아닙니다. 제네릭을 사용하여 구현되지 않은 것 같아요. 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 ...

John

관련 문제