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

时间:2014-02-11 14:58:52

标签: c# list

我在以下代码中出现此错误:

string[] colors = { "green", "brown", "blue", "red" };
var list = new List(colors);
IEnumerable query = list.Where(c => c.length == 3);
list.Remove("red");
Console.WriteLine(query.Count());

此外,似乎不再允许Count()。它被弃用了吗?

4 个答案:

答案 0 :(得分:13)

您正在尝试创建List<string>,您应该告诉编译器

var list = new List<string>(colors);

没有List,有一个名为List<T>泛型类,需要一个类型参数。如果不指定type参数,则无法创建通用列表。

此外,您尝试调用Count扩展方法。该方法将IEnumerable<T>作为第一个参数,而不是IEnumerable,这里是定义:

public static int Count<TSource>(this IEnumerable<TSource> source)

因此您应该使用IEnumerable<string>来访问该扩展方法:

IEnumerable<string> query = list.Where(c => c.Length == 3);
list.Remove("red");
Console.WriteLine(query.Count());

答案 1 :(得分:2)

您使用的是System.Collections.Generic.List<T>,因此它是通用列表,因此您必须提供通用参数 T。在您的示例中,您需要List<string>。所以试试:

List<string> list = new List<string>(colors);

答案 2 :(得分:0)

实际上,您的样本中根本不需要List,您可以简化所有内容:

var count = new [] { "green", "brown", "blue", "red" }
    .Where(c => c.length == 3)
    .Where(c => c != "red")
    .Count();
Console.WriteLine(count);

答案 3 :(得分:-3)

试试这个:

static void Main(string[] args)
{
    string[] colors = { "green", "brown", "blue", "red" };
    var list = new List<string>(colors); // <string>
    IEnumerable query = list.Where(c => c.Length == 3); // "Length", not "length"
    list.Remove("red");
    Console.WriteLine(query.Count());
}