2011-08-03 17 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; 
    } 
} 

error:El tipo no genérico 'System.Collections.IEnumerable' no se puede utilizar con argumentos de tipo

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

¿Por qué recibo esto?

+1

¿Cuál es su definición de SingleLinkNode? –

Respuesta

2

Estoy bastante seguro de que no ha definido su clase SingleLinkNode como si tuviera un parámetro de tipo genérico. Como tal, un intento de declararlo con uno está fallando.

El mensaje de error indica que SingleLinkNode es una clase anidada, así que sospecho que lo que puede estar ocurriendo es que se está declarando miembros de SingleLinkNode de tipo T, sin llegar a declarar T como un parámetro genérico para SingleLinkNode. Aún necesita hacer esto si quiere que SingleLinkNode sea genérico, pero si no, entonces simplemente puede usar la clase como SingleLinkNode en lugar de SingleLinkNode<T>.

ejemplo de lo que quiero decir:

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

Si hace quiere que su clase anidada a ser genérico, entonces esto va a funcionar:

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

Si desea utilizar IEnumerable<T>, como sugiere el título de su publicación, debe incluir using System.Collections.Generic;.

En cuanto a la clase SingleLinkNode, no sé de dónde lo sacaste, no es parte del framework .NET que puedo ver. Supongo que no está implementado con genéricos, y tendrá que agregar un montón de moldes de object a T en todas partes.

+0

Todavía nada = \ – Danpe

+3

Él ya tiene la lista en la ** primera línea ** de su código. – WEFX

+0

Es cierto, pero considerando el título de esta pregunta es "El tipo no genérico System.Collections.IEnumerable", asumí que algo cambió en el copiar y pegar del código. –

2

Esto compila para mí:

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

Deberá publicar su clase SingleLinkNode para obtener más información ers ...

John

Cuestiones relacionadas