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

Cis*_*ran 5 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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除了我不知道如何解决这个问题,任何帮助将不胜感激.

Bol*_*ock 9

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

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

此外,Joel Coehoorn的回答将解决你所拥有的问题,我相信你using首先将这条线放在那里,并且LBushkin的建议值得注意.


Joe*_*orn 9

这是一个侧面问题(BoltClock正确),但改变这个:

List<int> vectorList = new List<int>();
vectorList.Capacity(100);
Run Code Online (Sandbox Code Playgroud)

对此:

List<int> vectorList = new List<int>(100);
Run Code Online (Sandbox Code Playgroud)

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


LBu*_*kin 8

你在这里做的一些事情并不是一个好主意,并且直接导致你将要获得的一些错误.

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

using System.Collections.Generic.List
Run Code Online (Sandbox Code Playgroud)

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

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

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

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