2011-01-25 71 views
5

Estoy intentando crear un programa que creará un vector, generará 100 números aleatorios (0 - 99) y luego pedirá al usuario ingrese si desean los números ordenados de Alto a Bajo o Bajo a Alto.Usar el tipo genérico 'System.Collections.Generic.List <T>' requiere '1' tipo argumentos

Este es el código que hasta ahora he tratado de hacer funcionar el vector.

using System; 
using System.Collections.Generic; 
using System.Collections.Generic.List; //this is where the error comes. 
using System.Linq; 
using System.Text; 

namespace System.Collections.Generic 
{ 
    class List<T> 
    { 
     static void Main(string[] args) 
     { 
      List<int> vectorList = new List<int>(); 
      vectorList.Capacity(100); 
      int i = 100; 
      for (int x = 0; x <= 100; x++) 
      { 
       Random rand = new Random(); 
       i = rand.Next(0, 100); 
       vectorList.Add(i); 
       Console.WriteLine(i); 
      } 
     } 
    } 
} 

Excepto que no tengo idea de cómo solucionar este problema, cualquier ayuda sería muy apreciada.

+6

¿Por qué está redeclarando 'System.Collections.Generic.List '? – BoltClock

+0

Parece que tiene cierta confusión sobre los diferentes elementos de un programa C#. He intentado abordar algunos de estos en mi respuesta a continuación; Sin embargo, le sugiero que se tome un tiempo para leer sobre los diferentes constructos en el lenguaje C# para que pueda usarlos de manera efectiva y adecuada. – LBushkin

Respuesta

9

Es una cuestión secundaria (BoltClock tiene razón), pero este cambio:

List<int> vectorList = new List<int>(); 
vectorList.Capacity(100); 

A esto:

List<int> vectorList = new List<int>(100); 

Además, quitar el <T> de su nombre de la clase.

+0

pasa a ser la fuente de los dos listas de OP de errores en mi respuesta. Esos errores explicarían por qué tenía la directiva 'using' en primer lugar. – BoltClock

+0

¡Esto funcionó PERFECTAMENTE! Muchas gracias. – Cistoran

9

Eliminar esa línea using; List es una clase, no un espacio de nombres, por lo que no tiene que "usarlo".

Su método Main() debe pertenecer también a su propia clase; C# no permite la redefinición de una clase existente para agregar un método Main().

Además, Joel Coehoorn's answer resolverá el problema que está teniendo que creo que hizo poner esa línea using allí en primer lugar, y LBushkin's advice vale la pena prestar atención.

+0

Cuando elimino la línea, me da dos errores más. 'System.Collections.Generic.List ' no contiene una definición para 'Capacidad' y no se puede encontrar ningún método de extensión 'Capacidad' que acepte un primer argumento de tipo 'System.Collections.Generic.List ' (¿Está usted ¿falta una directiva using o una referencia de ensamblado?) y un error que se lee igual que eso, excepto Agregar en lugar de Capacidad. – Cistoran

+0

@Cistoran: Joel Coehoorn tiene la solución en su respuesta. – BoltClock

1

remove:

using System.Collections.Generic.List; 

lista está contenida en el espacio de nombres genéricos que está "utilizando".

1

Solo necesita importar el espacio de nombres. Entonces quita la línea ofensiva.

Aparte de eso, ha declarado que su clase de programa es genérica List<T>. No necesita eso, su punto de entrada debería estar en una clase estática normal.

8

Hay una serie de cosas que hace aquí que no son una buena idea, y son directamente responsables de algunos de los errores que va a obtener.

En primer lugar, en C#, la directiva using tiene como objetivo identificar un espacio de nombres completo del que dependerá, y todos los tipos expuestos en ese espacio de nombres. La línea

using System.Collections.Generic.List 

no se refiere a un espacio de nombres, pero a un tipo (List<T>) - y no es apropiado.

A continuación, intenta crear una clase genérica List<T> como clase principal de su programa ... y en el espacio de nombres System.Collections.Generic no menos. Bueno, esto entrará en conflicto con la clase .NET List<T> existente, por lo que también obtendrás errores.

Lo que realmente quieres hacer aquí es crear un espacio de nombres que esté asociado con (o describa) el programa que estás escribiendo. No intente reutilizar el existente.NET name name para ese propósito. Y no nombre su clase List<T>.

Finalmente, su clase no es realmente una clase genérica ... el parámetro de tipo T no se utiliza para ningún propósito en el código del programa. Y su clase no es una implementación de una lista ... es un ListProcessor (o algo similar a eso). Debe tener cuidado al nombrar clases o interfaces en un programa para que tengan una relación sólida con el nombre. También es una buena idea (cuando sea posible) evitar crear nombres que colisionen con los que ya utilizan las clases comunes en .NET framework, ya que esto puede generar ambigüedad y confusión en el código.

+0

+1 ¡Un gran consejo! Todo lo que realmente dije es que volver a definir los espacios de nombres/clases existentes es ilegal ... – BoltClock

+0

Sí, estaba cambiando algunas cosas para reflejar cosas que estaba leyendo en MSDN, y ahora me doy cuenta de que no tiene nada que ver con mi problema. Este es un consejo, aunque suena muy apreciado. – Cistoran

Cuestiones relacionadas