Для использования универсального типа «System.Collections.Generic.List <T>» требуются аргументы типа «1» - PullRequest
5 голосов
/ 25 января 2011

Я пытаюсь создать программу, которая создаст вектор, сгенерирует 100 случайных чисел (0 - 99), а затем спросит пользователя, хотят ли они отсортировать числа от высокого к низкому или от низкого до высокого.

Это код, который я пока пытаюсь заставить работать вектор.

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

За исключением того, что я понятия не имею, как решить эту проблему, любая помощь будет принята с благодарностью.

Ответы [ 5 ]

9 голосов
/ 25 января 2011

Это побочная проблема (у BoltClock все правильно), но измените это:

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

К этому:

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

Кроме того, удалите <T> из вашего имени класса.

9 голосов
/ 25 января 2011

Удалить эту using строку;List - это класс, а не пространство имен, поэтому вам не нужно его «использовать».

Ваш Main() метод также должен принадлежать своему классу;C # не позволяет переопределить существующий класс для добавления Main() метода.

Кроме того, Ответ Джоэла Кехорна решит проблему, которая, по моему мнению, заставила вас поставить using Во-первых, строчка, и Совет Л.Бушкина заслуживает внимания.

8 голосов
/ 25 января 2011

Есть ряд вещей, которые вы здесь делаете, которые не являются хорошей идеей и непосредственно ответственны за некоторые ошибки, которые вы собираетесь получить.

Во-первых, в C # директива using предназначена для идентификации всего пространства имен, от которого вы будете зависеть, и всех типов, представленных в этом пространстве имен.Строка

using System.Collections.Generic.List

относится не к пространству имен, а к типу (List<T>) - и не подходит.

Далее вы пытаетесь создать универсальный классList<T> в качестве основного класса вашей программы ... и в пространстве имен System.Collections.Generic не меньше.Что ж, это будет конфликтовать с существующим классом .NET List<T> - поэтому вы также получите ошибки от этого.

То, что вы действительно хотите здесь сделать, - это создать пространство имен, которое связано (или описывает) программу, которую вы пишете.Не пытайтесь повторно использовать существующие пространства имен платформы .NET для этой цели.И не называйте свой класс List<T>.

Наконец, ваш класс на самом деле не является универсальным классом ... параметр типа T не используется ни для каких целей в программном коде.И ваш класс не является реализацией списка ... это ListProcessor (или что-то в этом роде).Вы должны быть осторожны при именовании классов или интерфейсов в программе, чтобы они имели тесную связь с тем, что они названы.Также полезно (когда это возможно) избегать создания имен, которые конфликтуют с именами, уже используемыми общими классами в .NET Framework, поскольку это может вызвать двусмысленность и путаницу в вашем коде.

1 голос
/ 25 января 2011

Вам нужно только импортировать пространство имен. Так что удалите оскорбительную строку.

Кроме этого, вы объявили, что ваш программный класс является универсальным List<T>. Вам это не нужно, ваша точка входа должна быть в обычном статическом классе.

1 голос
/ 25 января 2011

удалить

using System.Collections.Generic.List;

Список содержится в общем пространстве имен, которое вы уже «используете».

...