使用泛型类型'System.Collections.Generic.List <t>'需要'1'类型参数</t>

时间:2011-01-25 19:22:46

标签: c# generics namespaces

我正在尝试创建一个程序,它将创建一个向量,生成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 个答案:

答案 0 :(得分:9)

删除using行; List是一个类,而不是命名空间,因此您不必“使用”它。

你的Main()方法也应属于自己的类; C#不允许重新定义现有类以添加Main()方法。

此外,Joel Coehoorn's answer将解决您所遇到的问题,我认为您首先将using行放在那里,LBushkin's advice值得注意。

答案 1 :(得分:9)

这是一个副作用(BoltClock正确),但改变了这个:

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

对此:

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

另外,请从您的班级名称中删除<T>

答案 2 :(得分:8)

你在这里做的一些事情并不是一个好主意,并且直接导致你将会遇到的一些错误。

首先,在C#中,using指令旨在标识您将依赖的整个命名空间 - 以及该命名空间中公开的所有类型。这条线

using System.Collections.Generic.List

不是指代名称空间,而是指类型(List<T>) - 并且不合适。

接下来,您尝试创建一个通用类List<T>作为程序的主类......并且在System.Collections.Generic命名空间中也不例外。好吧,这将与现有的.NET List<T>类冲突 - 所以你也会从中获得错误。

您真正想要做的是创建一个与您正在编写的程序相关联(或描述)的命名空间。不要为此目的尝试重用现有的.NET框架名称。并且不要为您的班级List<T>命名。

最后,您的类实际上不是泛型类...类型参数T在程序代码中不用于任何目的。而你的类不是列表的实现......它是一个ListProcessor(或者沿着这些行的东西)。在程序中命名类或接口时应该小心,以便它们与命名的内容有很强的关系。避免创建与.NET框架中的公共类已经使用的名称冲突的名称也是一个好主意(如果可能的话),因为这可能会导致代码中出现歧义和混淆。

答案 3 :(得分:1)

删除:

using System.Collections.Generic.List;

列表包含在您已“使用”的通用命名空间中。

答案 4 :(得分:1)

您只需要导入命名空间。所以删除违规行。

除此之外,您已将您的程序类声明为通用List<T>。你不需要那样,你的入口点应该只是一个普通的静态类。